gpt4 book ai didi

c# - AsyncCallBack 同步完成

转载 作者:可可西里 更新时间:2023-11-01 07:47:30 27 4
gpt4 key购买 nike

我最近注意到以下模式,但我没有完全掌握 CompletedSynchronously 属性的用法:

IAsyncResult channelOpenResult = channel.BeginOpen(new AsyncCallback(OnOpenCompleteChannel), channel);
if (channelOpenResult.CompletedSynchronously)
{
CompleteOpenChannel(channelOpenResult);
}

然后再一次,在回调中:

void OnOpenCompleteChannel(IAsyncResult result)  
{
if (result.CompletedSynchronously)
return;
else
CompleteOpenChannel(result);
}

代码中的某处当然有一个函数:

void CompleteOpenChannel(IAsyncResult result) ...

这是一种根据异步调用是否直接完成来处理异步调用的方法吗?但是为什么在这种情况下使用它,因为总是会调用 AsyncCallback(会吗?)?有人可以举一个同步调用的例子吗?

最佳答案

参见 this blog .一个常见的模式是在一个循环中执行异步工作,检查 CompletedSynchronously 有助于避免出现“不走运”的情况,并且一堆异步调用碰巧完成了同步,并且你冒着 StackOverflowException 的风险。 (例如,如果您正在通过网络读取数据,并且您正在读取的数据已经通过网络传输并被缓冲,您的异步调用可能会同步完成,这意味着您的回调是在同一个线程上调用的(具有更高的堆栈),这意味着您最好不要在循环中安排另一个异步调用。)

关于c# - AsyncCallBack 同步完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1372053/

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