gpt4 book ai didi

c# - 如何等待多个异步操作完成

转载 作者:太空狗 更新时间:2023-10-29 20:11:24 26 4
gpt4 key购买 nike

我正在寻找一种调用多个异步操作并能够取消它们的简单方法:

var cancelTask = new ManualResetEvent(false);
IAsyncResult ar = StartAsyncBatch(cancelTask);
int resp = WaitHandler.WaitAny({ar.AsyncWaitHandle, cancelTask});

我必须如何构建 StartAsyncBatch?是否应该是派生类

class StartAsyncBatch : IAsyncResult

最佳答案

简单的回答就是你可以通过CancellationTokenSource构建的相应CancellationToken取消等待任务。这是一个例子。

var tokenSource = new CancellationTokenSource();

var task = Task.Factory.StartNew(() =>
{
for (int i = 0; i < 10; i++)
{
if (tokenSource.IsCancellationRequested)
{
//you know the task is cancelled
//do something to stop the task
//or you can use tokenSource.Token.ThrowIfCancellationRequested()
//to control the flow
}
else
{
//working on step i
}
}
}, tokenSource.Token);

try
{
task.Wait(tokenSource.Token);
}
catch (OperationCanceledException cancelEx)
{
//roll back or something
}

//somewhere e.g. a cancel button click event you call tokenSource.Cancel()

当您处理几个任务时,情况会有所不同。首先你要知道取消一个任务,其他任务还会继续吗?如果是,您需要为不同的任务创建不同的取消 token 并独立处理取消。否则他们可以共享相同的取消 token 。不同的需求导致不同的取消处理政策。

关于c# - 如何等待多个异步操作完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6906778/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com