簡體   English   中英

使用fire和忘記異步調用來配置.Await(false)

[英]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。 這意味着如果您在控制台應用程序中調用異步方法,除非您執行某些特殊操作,否則您的異步方法將不具有線程關聯性:這些異步方法中的延續可能最終“在任何地方”運行。

來源: “Await,SynchronizationContext和Console Apps”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM