介绍
我知道在 C# 的早期,所有返回的异步方法都会Task
被取消标记重载。这是一个示例类TcpClient
:
public Task ConnectAsync(string host, int port);
public ValueTask ConnectAsync(string host, int port, CancellationToken cancellationToken);
但是 .NET 6.0 引入了一种方法WaitAsync
,允许您等待带有取消令牌的任务。
问题
方法重载模式是否仍然相关CancellationToken
,如果是,为什么更好.WaitAsync(...)
?
该方法的根本问题
Task.WaitAsync
是它取消了等待但没有取消任务。你的任务还是会完成到最后,只是你不一定要等到这一刻。为了节省资源,您应该尽可能深入地传递取消令牌,而不是依赖于 WaitAsync 之类的拐杖。
顺便说一句,重载仍然是可选的,但出于不同的原因 - 您始终可以在新代码中使用默认参数: