使用异步方式调用同步方法
BeginInvoke 方法启动异步调用。 该方法与您需要异步执行的方法具有相同的参数,还有另外两个可选参数。 第一个参数是一个 AsyncCallback 委托,该委托引用在异步调用完成时要调用的方法。 第二个参数是一个用户定义的对象,该对象将信息传递到回调方法。 BeginInvoke 立即返回,不等待异步调用完成。 BeginInvoke 返回一个 IAsyncResult,后者可用于监视异步调用的进度。
EndInvoke 方法检索异步调用的结果。 在调用 BeginInvoke 之后随时可以调用该方法。 如果异步调用尚未完成,则 EndInvoke 会一直阻止调用线程,直到异步调用完成。 EndInvoke 的参数包括您需要异步执行的方法的 out 和 ref 参数(在 Visual Basic 中为 <Out> ByRef 和 ByRef)以及由 BeginInvoke 返回的 IAsyncResult。
两种写法:
static void Main()
{
Func<string, int> method = Work;
IAsyncResult cookie = method.BeginInvoke("test", null, null);
//
// ... here's where we can do other work in parallel...
//
int result = method.EndInvoke(cookie);
Console.WriteLine("String length is: " + result);
}
static int Work(string s) { return s.Length; }
第二种写法
static void Main()
{
Func<string, int> method = Work;
method.BeginInvoke ("test", Done, method); //调用的方法名,所要穿的参数值
// ...
//
}
static int Work (string s) { return s.Length; }
static void Done (IAsyncResult cookie)
{
var target = (Func<string, int>) cookie.AsyncState;//获得method
int result = target.EndInvoke (cookie);//调用EndInvoke.
Console.WriteLine ("String length is: " + result);
}
//////////////////////////
异步调用完成时执行回调方法
http://msdn.microsoft.com/zh-cn/library/22t547yb(VS.80).aspx
如果启动异步调用的线程不需要是处理结果的线程,则可以在调用完成时执行回调方法。 回调方法在 ThreadPool 线程上执行。
若要使用回调方法,必须将表示回调方法的 AsyncCallback 委托传递给 BeginInvoke。 也可以传递包含回调方法要使用的信息的对象。 在回调方法中,可以将 IAsyncResult(回调方法的唯一参数)强制转换为 AsyncResult 对象。 然后,可以使用 AsyncResult.AsyncDelegate 属性获取已用于启动调用的委托,以便可以调用 EndInvoke。
阅读更多
- 使用异步方式调用同步方法
- 使用异步方式调用同步方法
- 使用异步方式调用同步方法(实例详解)
- C#使用异步方式调用同步方法
- 使用异步方式调用同步方法
- [转摘]使用异步方式调用同步方法
- 使用异步方式调用同步方法
- 使用异步方式调用同步方法
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(10):服务器端和客户端数据类型的自动转换:以XML方式序列化数据、小结
- 用异步的方式调用同步方法
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(10):服务器端和客户端数据类型的自动转换:以XML方式序列化数据、小结
- VC++ .NET UI同步(使用Invoke托管方法),异步线程调用UI
- ES transport client底层是netty实现,netty本质上是异步方式,但是netty自身可以使用sync或者await(future超时机制)来实现类似同步调用!因此,ES transport client可以同步调用也可以异步(不过底层的socket必然是异步实现)
- 用异步的方式调用同步方法
- VB.NET中使用代表对方法异步调用
- SqlServer2008 数据库同步的两种方式(发布、订阅使用方法)
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法
- PerformClick 方法使用 以编程方式调用按钮的 Click 事件 (Visual C#)
- [置顶] Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)
- 简单解析三种JAVA调用方式-同步,异步,回调