gpt4 book ai didi

c# - Silverlight,处理异步调用

转载 作者:太空狗 更新时间:2023-10-29 21:59:41 27 4
gpt4 key购买 nike

我有一些代码如下:

        foreach (var position in mAllPositions)
{
DoAsyncCall(position);
}
//I want to execute code here after each Async call has finished

那么我该怎么做呢?
我可以做类似的事情:

        while (count < mAllPositions.Count)
{
//Run my code here
}

并在每次异步调用后增加计数...但这似乎不是一个好方法

有什么建议吗?是否有针对上述问题的某种设计模式,因为我确定这是一个常见的场景?

最佳答案

鉴于您正在使用 Silverlight,并且您无权访问信号量,您可能正在寻找类似这样的东西(用记事本编写,因此不保证语法完美):

int completedCallCount = 0;
int targetCount = mAllPositions.Count;

using (ManualResetEvent manualResetEvent = new ManualResetEvent(false))
{
proxy.DoAsyncCallCompleted += (s, e) =>
{
if (Interlocked.Increment(ref completedCallCount) == targetCount)
{
manualResetEvent.Set();
}
};

foreach (var position in mAllPositions)
{
proxy.DoAsyncCall(position);
}

// This will wait until all the events have completed.
manualResetEvent.WaitOne();
}

但是,Silverlight 强制您异步加载数据的好处之一是您必须在进行服务调用时努力锁定 UI,这正是您要做的处理这样的代码,除非你让它在后台线程上运行,我强烈建议你这样做。在后台进程完成之前,您始终可以显示“请稍候”消息。

关于c# - Silverlight,处理异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2307844/

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