如何在异步方法中调用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"的
有人能给我指一些更简单的东西吗,比如教程或示例,我可以看看吗?
感谢
在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
}
}