我什么时候应该向异步接口方法添加 CancellationToken?

问题描述 投票:0回答:1

我正在编写一个 C# 接口,它将有几种不同的实现,其中一些我无法控制。考虑到我的问题领域,所有(大多数)方法实现都将涉及某种网络通信。因此,我正在编写接口,以便所有方法都返回 Task 的实例并且可以异步运行。到目前为止一切顺利。

现在我正在考虑向部分/所有接口方法添加

CancellationToken
参数。据我所知,当
 时,应该向方法添加 
CancellationToken

  • 该方法可能需要很长时间,并且
  • 在某些地方,如果操作已取消,实现可以检查令牌并防止进一步使用资源。

但是当方法实现未知时,我并不清楚标准是什么,例如写接口的时候。例如,我的接口中的一些方法涉及简单的操作,并且“可能”足够快,在大多数情况下不需要取消支持,但我不能确定,因为我不控制所有实现,并且无论如何,它们都会涉及网络通信,因此最终取决于网络延迟。 决定是否向接口方法(其实现未知)添加

CancellationToken

的经验法则/最佳实践是什么?

    

c# cancellation-token
1个回答
0
投票
CancellationToken

参数。即使该方法不执行任何“繁重”的操作,它也需要接受此操作,以便可以将令牌传递给它进行的其他异步调用。

因此,即使该方法不直接使用令牌,它也无法知道链中的另一个异步方法如何使用它。

因此,作为定义接口的人,您应该在每个异步方法上指定

CancellationToken

。这取决于方法的实现者是否认为他们需要他们的方法直接使用它,但每个人都应该将其级联下来。

正如 Jeroen 已经提到的,在不直接使用该代币的情况下传递该代币几乎不需要任何成本。

© www.soinside.com 2019 - 2024. All rights reserved.