gpt4 book ai didi

c# - IAsyncResult.AsyncWaitHandle 的使用

转载 作者:行者123 更新时间:2023-11-30 20:10:10 26 4
gpt4 key购买 nike

在异步编程模型中,似乎有 4 种方式(如 Calling Synchronous Methods Asynchronously 中所述)进行异步方法调用。

调用 EndInvoke() 方法使调用线程等待方法完成并返回结果。

通过 IAsyncResult.AsyncWaitHandle.WaitOne() 似乎也有同样的作用。 AsyncWaitHandle 获得完成信号(换句话说,主线程等待异步方法的完成)。然后我们可以执行 EndInvoke() 来获取结果。

  1. 直接调用 EndInvoke() 和在 WaitOne()/WaitAll() 之后调用有什么区别?

  2. 在轮询技术中,我们通过调用 Thread.Sleep() 为其他线程提供时间来利用系统资源。AsyncWaitHandle.WaitOne() 或 EndInvoke() 是否使主线程在等待时继续休眠?

最佳答案

Q1。您的代码或应用程序的运行方式没有差异,但可能存在一些运行时差异(再次不确定,但根据我对Async delegates 的理解进行猜测)。

  • IAsyncResult.AsyncWaitHandle 主要作为同步机制提供,如果您没有此同步需求,则使用 WaitAll()WaitAny()你不应该阅读 AsyncWaitHandle 属性。 原因:AsyncWaitHandle 在异步运行时不必由委托(delegate)实现(创建),直到它被外部代码读取为止。我不确定 CLR 处理异步委托(delegate)的方式以及它是否创建 WaitHandler ,但理想情况下,如果它可以处理运行你的异步委托(delegate)而不创建另一个 WaitHandle 它不会,但你调用 WaitOne() 会创建这个处理并且您有额外的责任处置(关闭)它以有效释放资源。因此,建议在没有 WaitAll()WaitAny() 支持的同步要求时不要读取此属性。

Q2。 This Question回答 sleep 和等待之间的区别。

关于c# - IAsyncResult.AsyncWaitHandle 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5374121/

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