Red*_*ood 5 c# asynchronous async-await
我的代码看起来像这样:
我试图避免将它放在 Task.Run 中,因为它是异步的并且应该在主线程上运行良好
但是,它不会执行上下文切换(并且将永远运行),除非我将 Task.Delay 插入循环中
有没有更好的方法来实现这一点(没有 Task.Run)?
var tasks = new List<Task>();
var cts = new CancellationTokenSource();
tasks.Add(DoSomething(cts.Token));
cts.Cancel();
Task.WaitAll(tasks.ToArray());
Console.WriteLine("Done");
async Task DoSomething(CancellationToken ct)
{
while (!ct.IsCancellationRequested)
{
await Task.CompletedTask;
await Task.Delay(1); // Without this is doesn't do context switch
}
}
Run Code Online (Sandbox Code Playgroud)
当我工作量很大并遇到此问题时,我正在尝试取消单元测试。
尝试
async Task DoSomething(CancellationToken ct)
{
while (!ct.IsCancellationRequested)
{
//await Task.CompletedTask; //you can omit this line
await Task.Yield();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
648 次 |
| 最近记录: |