C# 异步执行中的同步睡眠?
有没有一种方法可以在一个异步执行的函数中创建一种休眠方式来模拟thread.sleep 比如我有C# 异步执行中的同步睡眠?,c#,asynchronous,C#,Asynchronous,有没有一种方法可以在一个异步执行的函数中创建一种休眠方式来模拟thread.sleep 比如我有 Workthread run() { while (true) { //All calls cannot pause inside, async CallWorkFunction(); CallOtherWorkFuctuion(); Callthirdworkfunction(); thread.sleep(0x10); curtick++; } } //CallWor
Workthread run()
{
while (true)
{
//All calls cannot pause inside, async
CallWorkFunction();
CallOtherWorkFuctuion();
Callthirdworkfunction();
thread.sleep(0x10);
curtick++;
}
}
//CallWorkFunction()
if (nexttick - curtick > 0)
return;
foreach (var item in collection.ToList())
{
if (!item.IsReady)
continue;
collection.Remove(item);
ProcessItem(item);
nexttick = curtick + 20;
return;
}
如果nexttick
可以像线程thread.Sleep()
一样工作,而不停止执行,则此函数的工作效果会更好。由于异步代码有一系列基于状态的检查,其中许多可以用正确的暂停来代替。尝试这样做:
async Workthread run()
{
while (true)
{
//All calls cannot pause inside, async
CallWorkFunction();
CallOtherWorkFuctuion();
Callthirdworkfunction();
await Task.Delay(0x10);
curtick++;
}
}
您正在尝试每16毫秒轮询一次吗?您的
run()
方法看起来应该是一个计时器,而不是一个睡眠循环。想想看,整件事似乎都应该有个计时器。但是,如果没有更多的上下文,很难确定。如果您使用的是async/await,那么您可以等待Task.Delay
。