.NET单个任务的用例等待



我想知道创建"热"任务并通过阻止线程等待它的用途是什么。示例:

Task.Run(() => DoWork()).Wait();

因为主线程将被阻止直到任务未完成,所以我只会在主线程中运行dowork(),而不会将其放入新任务中。

我在Internet的许多地方(也是MSDN)看到了这个示例,并在我们的公司项目中找到了此类代码。我只有要将取消令牌传递到运行任务时才能看到它有用。

想象您有其他人写的第三方API。让我们考虑以下内容:

  1. 您知道有时会悬挂功能的错误。
  2. 您没有选择自己重写API的选择。
  3. 没有足够的时间自己重写API。
  4. API的作品足够好

如果上述任何语句都是正确的,那么您可能会创建一个任务并等待完成。

让我们以第一个项目为例,有一个错误会导致API函数悬挂的错误...如果您启动任务并等待API函数完成(如下),您不会承担任何风险根据有问题的API悬挂整个程序。

ThirdPartyApi api = new ThirdPartyApi();
Task apiFunctionRunning = null;
// start the API's function running on it's own thread
apiFunctionRunning = Task.Run(() =>
{
    api.DoWork();
});
// wait for the API function to complete but also time-out if
// there is some problem where it hangs up (give it maybe 5s)
apiFunctionRunning.Wait(5000);

最新更新