gpt4 book ai didi

c# - 有没有办法在异步代码中强制没有 Task.Delay 的上下文切换

转载 作者:行者123 更新时间:2023-12-04 13:05:28 28 4
gpt4 key购买 nike

我的代码看起来像:
我试图避免将它放在 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
}
}
当我的工作量很大并遇到此问题时,我正在尝试对取消进行单元测试。

最佳答案

尝试

async Task DoSomething(CancellationToken ct)
{
while (!ct.IsCancellationRequested)
{
//await Task.CompletedTask; //you can omit this line
await Task.Yield();
}
}

关于c# - 有没有办法在异步代码中强制没有 Task.Delay 的上下文切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69722231/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com