gpt4 book ai didi

c# - 同步和异步回调

转载 作者:太空狗 更新时间:2023-10-29 20:48:04 25 4
gpt4 key购买 nike

我在阅读 MSDN 文档和代码示例时对某些术语感到困惑。

C# 中的回调是什么?特别是,什么是同步和异步回调?

请从外行的角度解释一下。

另外,请解释一下IAsyncCallback IAsyncResult 接口(interface)。我们如何实现它? (用非常简单的例子)

提前致谢。

最佳答案

IAsyncCallback接口(interface)不存在,无法实现。

我怀疑你真的想知道 IAsyncResult interface .

我建议您阅读 this page在 MSDN 上。


IAsyncResult interface表示在后台运行的操作(例如 Web 请求或数据库调用),同时您的代码继续执行。它可以告诉您操作是否完成(IsCompleted 属性)。它还为您提供 WaitHandle object (AsyncWaitHandle 属性)可用于等待操作完成。 (通过调用 result.AsyncWaitHandle.WaitOne() )

你得到一个 IAsyncResult通过调用 Begin Whatever 方法。 ( BeginExecuteReader BeginGetResponse 和许多其他)。 Begin Whatever 方法将采用操作所需的任何参数(例如, BeginExecuteReader 可以采用 CommandBehavior 参数),并且可以采用 AsyncCallback 委托(delegate)(不是接口(interface))和状态参数。在返回 IAsyncResult对象。

AsyncCallback 委托(delegate)是您提供的一种方法,将在操作完成时调用。它通常会在不同的线程上调用,所以要小心。您的 AsyncCallback 方法将获得与 Begin 相同的 IAsyncResult Whatever 方法早给你了。 state参数放入IAsyncResult中,被系统忽略;您可以在 AsyncCallback 方法中使用它来跟踪操作的目的。 (状态可以是任何你想要的,包括 null )

在您的 AsyncCallback(或其他任何地方)内,您可以调用 End Whatever 对应于 Begin 的方法 Whatever 您首先调用的方法。你必须给它来自 Begin 的 IAsyncResult Whatever 或来自 AsyncCallback。当您调用它时,它将等待操作完成(如果尚未完成),然后将操作结果返回给您。 (假设该操作返回一些东西;例如,WebRequest.EndGetResponse 将返回一个 WebResponse)。如果操作过程中出现任何错误,End Whatever 会抛出异常。


如果您想创建自己的可以在后台运行的操作,您可以实现 IAsyncResult。您还将创建 Begin Whatever End Whatever 分别返回和接受它的方法。有关实现 IAsyncResult 的更多信息,请参阅 here .

关于c# - 同步和异步回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1354696/

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