2013-08-22 112 views
0

有沒有辦法以某種方式創建一種方式睡在一個執行的函數是異步模仿一個thread.sleep?異步執行中的同步睡眠?

比如我有

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()工作不停止執行。由於異步代碼正在出現一系列基於狀態的檢查,其中許多可以用正確的暫停來替換。

+2

你是想查詢的東西每16毫秒?你的'run()'方法看起來應該是一個定時器而不是一個睡眠循環。想想看,整個事情看起來應該在計時器上。儘管沒有更多的上下文,但很難說清楚。 –

+3

如果您使用async/await,則可以等待Task.Delay。 –

回答

0

嘗試這樣做:

async Workthread run() 
{ 
    while (true) 
    { 
    //All calls cannot pause inside, async 
    CallWorkFunction(); 
    CallOtherWorkFuctuion(); 
    Callthirdworkfunction(); 

    await Task.Delay(0x10); 

    curtick++; 
    } 
}