4
比方說,我想只是迅速做出異步以下方法運行:Task.Yield(); SyncAction(); vs Task.Run(()=> SyncAction());
ResultType SynchronousCode(ParamType x)
{
return SomeLongRunningWebRequest(x);
}
什麼是如何以下兩個代碼示例執行/計劃的區別?
async Task<ResultType> AsynchronousCode(ParamType x)
{
return await Task.Run(() => SomeLongRunningWebRequest(x));
}
相比:
async Task<ResultType> AsynchronousCode(ParamType x)
{
await Task.Yield();
return SomeLongRunningWebRequest(x);
}
據我所知,Task.Yield()調用將確保線程立即返回給調用者,而Task.Run()肯定會安排代碼在ThreadPool的某個地方運行,但是這兩種方法都有效地使該方法異步?讓我們假設這個問題,我們在默認的SynchronizationContext上。
所以,如果我們在默認的SynchronizationContext上,那麼根本沒有區別? – Dev2345
@ Dev2345只要你沒有一個時髦的任務調度器覆蓋默認調度程序....,是的,我認爲... –
我想在默認情況下,它沒有區別。但我很難想象你會這樣做,除了UI應用程序(以避免阻塞) – Evk