我可能对某些事情有误解。 对于我来说,在异步方法中,有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”任务创建创建的专用线程上执行,所以这与执行是一样的从一开始就是线程池上的任务。
如有错误请指正。
这是正确的,这就是为什么
LongRunning
对于 async
委托几乎总是没用的。
此外,如果当前没有任务调度程序(通常没有),那么对于任何
await
,无论有或没有 ConfigureAwait(false)
,情况都是如此。
顺便说一句,
LongRunning
只是对线程池的提示。它不保证专用线程。