[英]Configure.Await(false) with fire and forget async calls
目前在我的控制台應用程序中,我執行以下操作以刪除文件並忘記樣式。
我想知道為每個Task.Run
調用設置ConfigureAwait(false)
是否有任何性能提升?
(我的假設是否定,因為我不等待電話,但我不確定)
for(var file in files)
'
'
// Check for certain file condition and decide to delete it.
'
'
if(shouldDeleteFile)
{
Task.Run(() => File.Delete(file));
}
ConfigureAwait(false)
在這里不會做任何事情,因為沒有await
配置。
它是“配置等待”,而不是“配置任務”。
如果你看一下方法本身的簽名,這是不言自明的:
public ConfiguredTaskAwaitable ConfigureAwait (bool continueOnCapturedContext);
參數是continueOnCapturedContext
,它是一個延續,但你說你正在以火和忘記的方式做你的工作,你沒有做await
。 結論,因為沒有任何延續 ,所以沒有效果。
簡答:不,
有一種常見的應用程序沒有SynchronizationContext:控制台應用程序。 調用控制台應用程序的Main方法時,SynchronizationContext.Current將返回null。 這意味着如果您在控制台應用程序中調用異步方法,除非您執行某些特殊操作,否則您的異步方法將不具有線程關聯性:這些異步方法中的延續可能最終“在任何地方”運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.