如何在异步方法调用的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 
    } 
}