【问题标题】:Does Task.ConfigureAwait(false) on the last method line affect anything?最后一个方法行上的 Task.ConfigureAwait(false) 会影响什么吗?
【发布时间】:2017-01-27 16:31:22
【问题描述】:

我了解对正在等待的任务调用 ConfigureAwait(false) 有时会带来性能优势,因为它可以防止不必要地返回到原始 SynchroniZationContext。

例如:

async Task Something()
{
   // Let's say I'm on the UI context
   //...
   await AnotherTask.ConfigureAwait(false);

   // Code here is no longer running on the UI context.
   // It runs in a thread pool synchronization context (i.e. null).
}

我的问题是:如果任务调用在方法的最后一行,并且我们跳过了 ConfigureAwait(false),那么编译器是否足够聪明,可以防止不必要地返回到原始上下文?

async Task Something()
{
   // Let's say I'm on the UI context
   //...
   await AnotherTask; // Dropped -> .ConfigureAwait(false);        
}

即使在 await 调用之后方法中没有任何内容,这里是否会出现性能损失潜在的死锁

【问题讨论】:

    标签: wpf multithreading async-await task-parallel-library task


    【解决方案1】:

    编译器是否足够聪明,可以防止不必要地返回原始上下文?

    还没有。

    即使在 await 调用之后方法中没有任何内容,这里是否会出现性能损失或潜在的死锁?

    是的。

    【讨论】:

    • 感谢斯蒂芬的明确和中肯的回应。我还刚刚从 Amazon 购买了你的 Concurrency in C# Cookbook 以提高我的知识:)
    • 我可以邀请你看看这个问题吗:) stackoverflow.com/questions/41908593/…
    猜你喜欢
    • 2018-01-11
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 2012-05-05
    • 1970-01-01
    • 2014-12-01
    • 2021-04-29
    相关资源
    最近更新 更多