带火灾的Configure.Await(false)并忘记异步调用

时间:2019-02-22 23:31:24

标签: c# task-parallel-library

当前,在控制台应用程序中,我将执行以下操作以删除文件并忘记样式。

我想知道为每个ConfigureAwait(false)调用设置Task.Run是否有任何性能提升?

(我的假设是不,因为我没有等待电话,但不确定)

 for(var file in files)
  '
  '
  // Check for certain file condition and decide to delete it. 
  '
  '
  if(shouldDeleteFile)
  {
    Task.Run(() => File.Delete(file));
  }

3 个答案:

答案 0 :(得分:6)

ConfigureAwait(false)在这里什么也不做,因为没有await可以配置。

它是“等待配置”,而不是“配置任务”。

答案 1 :(得分:3)

如果您看一下方法本身的签名,这是不言自明的:

  tasks:
    - name: with list of items looping
      debug:
        msg: "{{ item }}"
      with_items: "{{ vars[mylist] }}"

参数为public ConfiguredTaskAwaitable ConfigureAwait (bool continueOnCapturedContext); ,它是 continuation ,但是您说自己是在工作中忘却了,而不是continueOnCapturedContext。结论,因为您没有任何继续

答案 2 :(得分:2)

简短答案:否,

  

一种常见的应用程序没有   SynchronizationContext:控制台应用程序。当您的控制台应用程序   调用主方法,SynchronizationContext.Current将返回   空值。这意味着如果您在自己的计算机中调用异步方法   控制台应用程序,除非您执行特殊操作,否则您的异步   方法将不具有线程亲和力:这些方法中的继续   异步方法可能最终在“任何地方”运行。

来源:"Await, SynchronizationContext, and Console Apps"