如何在异步方法调用的EndInvoke
问题描述:
我有一个正常的方法如何在异步方法调用的EndInvoke
public List<string> FindNearByCity(string targetCity)
{
// ... some implementation
}
我要添加此方法异步支持,所以我写了这个:
public IAsyncResult BeginFindNearByCity(string targetCity, AsyncCallback callback, object obj)
{
Func<string, List<string>> method = FindNearByCity;
return method.BeginInvoke(targetCity, callback, obj);
}
public List<string> EndFindNearByCity(IAsyncResult result)
{
Func<string, List<string>> method = FindNearByCity;
return method.EndInvoke(result);
}
的BeginFindNearByCity工作正常,但是当涉及EndFindNearByCity时,异常会在EndInvoke命中时抛出。
我看着汽车代异步Web服务方法,看来我需要实现的东西叫“ChannelBase”
任何人都可以指向我,我可以看看一些更简单的像教程或样品是什么?
感谢
答
要创建在EndXXX
方法的委托是一个单独的实例您在BeginXXX
方法创建的委托,因此它没有任何的IAsyncResult
的知识,要传递到其EndInvoke()
方法。
您必须在EndXXX
方法中使用与BeginXXX
方法相同的代理,例如,
public class Foo
{
private readonly Func<string, List<string>> method;
public Foo()
{
this.method = this.FindNearByCity;
}
public IAsyncResult BeginFindNearByCity(string targetCity, AsyncCallback callback, object obj)
{
return this.method.BeginInvoke(targetCity, callback, obj);
}
public List<string> EndFindNearByCity(IAsyncResult result)
{
return this.method.EndInvoke(result);
}
public List<string> FindNearByCity(string targetCity)
{
// ... some implementation
}
}