gpt4 book ai didi

c# - 循环中委托(delegate)的异步调用

转载 作者:太空狗 更新时间:2023-10-29 23:50:36 25 4
gpt4 key购买 nike

我需要为同一个函数异步调用多个委托(delegate)。问题是我应该如何对待回调函数?我们有几个委托(delegate)在运行,所以 CallbackMethod 并不意味着所有异步委托(delegate)都已完成。

AsyncMethodCaller c = new AsyncMethodCaller(instance.dummyMethod);
for (int i = 0; i < 100; i++)
{
IAsyncResult res = c.BeginInvoke(5000,
out dummy,
new AsyncCallback(CallbackMethod),
"executed on thread {0}, with result value \"{1}\".");
}

最佳答案

我会考虑使用 TPL 提供的 Task .

var task1 = Task.Run(() => instance.dummyMethod)
.ContinueWith((completedTask) => Console.WriteLine("Each callback here. Result: " + completedTask.Result));

// Blocks calling thread until all tasks are done.
Task.WaitAll(new [] { task1, task2 });

WaitAll 都确保所有Task 在继续主线程之前完成。以上允许您实现单独的回调。

所有异步方法完成时,或者使用单个回调:

Task.Factory.ContinueWhenAll(new [] { task1, task2 },
(allTasks) => Console.WriteLine("Callback when all are done."));

关于c# - 循环中委托(delegate)的异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30701797/

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