如何在异步方法中调用EndInvoke

本文关键字:调用 EndInvoke 异步方法 | 更新日期: 2023-09-27 18:20:25

我有一个正常的方法

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"的

有人能给我指一些更简单的东西吗,比如教程或示例,我可以看看吗?

感谢

如何在异步方法中调用EndInvoke

EndXXX方法中创建的委托是在BeginXXX方法中创建委托的独立实例,因此它不知道要传递给其EndInvoke()方法的IAsyncResult

您必须在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
    }
}