在长时间运行的任务中配置Await(false)

问题描述 投票:0回答:1

我可能对某些事情有误解。 对于我来说,在异步方法中,有ConfigureAwait(false);将允许任务继续在线程池上执行。

因此,如果我在专用线程上声明一个长时间运行的任务,用于后台工作(例如检查队列上的某些工作)

   _managementTask = Task.Factory.StartNew(async () =>
   {
    while (!_cancellationToken.IsCancellationRequested)
    {
       await Task.Delay(10000, _cancellationToken).ConfigureAwait(false);
       await CheckWork().ConfigureAwait(false);
    }
   }, TaskCreationOptions.LongRunning);

那么这意味着,由于第一个ConfigureAwait(false),后面的所有代码和循环都将在线程池上执行,而不是在“LongRunning”任务创建创建的专用线程上执行,所以这与执行是一样的从一开始就是线程池上的任务。

如有错误请指正。

c# .net asynchronous task configureawait
1个回答
0
投票

这是正确的,这就是为什么

LongRunning
对于
async
委托几乎总是没用的。

此外,如果当前没有任务调度程序(通常没有),那么对于任何

await
,无论有或没有
ConfigureAwait(false)
,情况都是如此。

顺便说一句,

LongRunning
只是对线程池的提示。它不保证专用线程。

© www.soinside.com 2019 - 2024. All rights reserved.