我正在编写一个在.NET 中使用提供者模型模式的小型应用程序。每个提供者都有一种方法可以实现,以便在我的应用程序中插入。
我想在不同的线程中运行所有提供者的特定工作(实现的方法),但是当一个任务完成时,所有其他任务都需要停止执行。
我在 .NET 中使用带有 CancellationToken 的 async/await 模型来取消任务。
tasks.Add(Task.Run(() =>
{
if (token.IsCancellationRequested)
token.ThrowIfCancellationRequested();
return provider.DoWork();
}, token));
while (tasks.Count > 0)
{
var t = await Task.WhenAny(tasks);
tasks.Remove(t);
var result = await t;
if (!string.IsNullOrEmpty(result))
{
tokenSource.Cancel();
return result;
}
}
某些 provider.DoWork() 方法可能非常慢,并且要停止执行 DoWork 方法的线程,我必须在 DoWork 方法中检查 token.IsCancellationRequested 但我不能,因为这些方法是从其他人那里编写的,例如。在这种情况下,DoWork 之外的 token.IsCancellationRequested 检查并不重要。
总而言之,当一个任务完成时,其他任务必须停止,但无法访问每个线程中运行的代码。
期待听到您对此的看法。