c# - Thread 中的 join() 方法实际上在做什么?
问题描述
我对 Thread 中的 join() 有疑问。我想在 Thread 中获得一个会话,所以我在我的单个线程中使用它。我第一次使用它时没有加入(),不幸的是我第一次获得会话值。但是在使用 Join() 之后它工作正常。join 在一个线程中做什么。这是我尝试过的代码
public string ImportData(string entity, DataTable excelData, string dataExchangeSelectedColum, string conString, string fnameWithoutGuid, string loginName)
{
try
{
Guid importID = Guid.NewGuid();
HttpContext ctx = HttpContext.Current;
Thread thread = new Thread(() => { HttpContext.Current = ctx; ImportInThread(importID, entity, excelData, dataExchangeSelectedColum, conString, fnameWithoutGuid, loginName); });
thread.Start();
thread.Join();
return importID.ToString();
}
catch (Exception)
{
throw;
}
}
解决方案
仅供参考:没有真正的程序应该这样做:
Thread t = new Thread(() => { doStuff(); });
t.Start();
t.Join();
调用Join()
后立即调用Start()
会破坏创建新线程的目的。与创建新线程不同,该程序可以doStuff()
在此时简单地调用。
当你想这样做时创建一个新线程:
Thread t = new Thread(() => { doStuff(); });
t.Start();
doOTHERStuff();
t.Join();
现在,“Stuff”和“OTHERStuff”都同时发生了,这就是线程的全部目的。
推荐阅读
- angular - Angular 5:在自定义验证器中调用服务方法
- javascript - 我可以从我的下拉选择变量中删除“null”吗
- css - 图像图像位于顶部/左侧的引导卡,取决于列断点?
- ios - 如何更新/重新加载 UICollectionView 中的不可见单元格?
- bower - 当从托管凉亭包的工件中删除匿名访问时,无法使用 .bowerrc 中的凭据进行“凉亭安装”
- angular - Angular 7 + NG Bootstrap,从服务中打开模式?
- ef-code-first - 用 EF Code First 改变 localdb 的路径
- javascript - 如何从Angular 6或7组件内的LESS文件访问styles.less中的LESS变量?
- c# - 如何更改 Swagger 响应的类型?
- javascript - AngularJS 服务返回对错误控制器实例的响应