C# 定制等待者有什么实际用途吗?

C# 定制等待者有什么实际用途吗?,c#,.net,task-parallel-library,async-await,C#,.net,Task Parallel Library,Async Await,Stephen Toub的博客文章中有一些定制等待者的有趣例子。我特别喜欢等待任务。with culture()模式,我认为这在现实生活中很有用。然而,我想不出任何其他可能无法用TaskCompletionSource完成的事情 一个有趣的领域,它可能对执行上下文的切换很有用,比如Stephen的博客中的ControlWaiter,或者来自的ContextSwitcher。然而,AFAIU认为这不是一个好的做法 看到其他一些实用的定制等待器示例会很有趣,它们仍然不会损害代码的可读性和可维护性。定

Stephen Toub的博客文章中有一些定制等待者的有趣例子。我特别喜欢
等待任务。with culture()
模式,我认为这在现实生活中很有用。然而,我想不出任何其他可能无法用
TaskCompletionSource
完成的事情

一个有趣的领域,它可能对执行上下文的切换很有用,比如Stephen的博客中的
ControlWaiter
,或者来自的
ContextSwitcher
。然而,AFAIU认为这不是一个好的做法


看到其他一些实用的定制等待器示例会很有趣,它们仍然不会损害代码的可读性和可维护性。

定制等待器的实际用例很少

然而,也有一些例子,它们似乎属于以下类别之一:

  • 出于性能原因,避免执行任务。Windows应用商店平台使用自定义可等待项公开其(非托管)异步操作。另一个例子是Stephen Toub在高流量内存密集型场景中的应用
  • 修改现有等待的行为。例如,
    ConfigureAwait(false)
  • 允许重用等待的资源。“事件等待器”类型满足每个引发的事件一个
    wait
    。相反,任务只能完成一次
  • Task.Yield
    还使用了一个定制的等待,但它似乎属于自己的一个类别


    就个人而言,我避免定制等待。通常,类别(1)仅被视为过早优化。类别(2)在概念上是很有趣的,但是如果你探究它,你会发现行为修饰符组合得不好。类别(3)也很有趣,但在IMO中更具争议,因为完成语义可能令人惊讶。

    列表问题(在本例中,要求列出所有可能使用的自定义等待者)本质上并不适合这样做。这样的问题无法给出具体、具体、可验证的正确答案。@Servy,如果我将其从其他问题改为任何问题,可以吗?
    等待任务。WithCulture()
    ?不,这没有什么区别。从投票结果看,很多人对这个问题感兴趣。这个问题非常具体,它甚至包括一个答案的例子(顺便说一句,谢谢!),它回答了一个关于第三方物流(如何流动文化)的常见问题。@PanagiotisKanavos在考虑是否应该关闭一个问题时,受欢迎程度是有依据的。仅仅因为一个问题很受欢迎,并不适合这个网站。不,这并不具体。任何可能的定制任务等待者都非常广泛;没什么特别的。和往常一样,这是一个很好的回答。