【发布时间】:2020-04-07 00:24:22
【问题描述】:
我知道如何取消任务,但找不到任何有关如何将取消添加到 ValueTask 方法的信息。 通常我会取消这样的任务:
public async Task<int> Foo(
CancellationToken cancellationToken)
{
TaskCompletionSource<int> tcsCancel =
new TaskCompletionSource<int>();
cancellationToken.Register(() =>
{
tcsCancel.TrySetCanceled();
});
Task<int> task = LongOperation();
var completedTask = await Task.WhenAny(
tcsCancel.Task,
task).ConfigureAwait(false);
return await completedTask.ConfigureAwait(false);
}
或者像这样:
if (cancellationToken.IsCancellationRequested)
return Task.FromCanceled<int>(cancellationToken);
问题是,ValueTask 既没有 FromCanceled 也没有 WhenAny。我应该这样做吗...
cancellationToken.ThrowIfCancellationRequested();
【问题讨论】:
-
为什么不将取消令牌传递给
LongOperation();?你在做什么似乎很奇怪,我不相信它会取消LongOperation();以至于忽略它的结果。 -
别管逻辑了。我刚刚意识到我犯了一些错误。但总的来说,我仍然想知道如何使用 ValueTask 添加取消支持
标签: c# .net-core async-await task-parallel-library cancellation