gpt4 book ai didi

c# - 如何在异步方法中调用 EndInvoke

转载 作者:行者123 更新时间:2023-11-30 21:09:43 25 4
gpt4 key购买 nike

我有一个正常的方法

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 方法中创建的委托(delegate)是您在 BeginXXX 方法中创建的委托(delegate)的单独实例,因此它不知道 IAsyncResult,您将其传递给它的 EndInvoke() 方法。

您必须在 EndXXX 方法中使用与 BeginXXX 方法相同的委托(delegate),例如

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
}
}

关于c# - 如何在异步方法中调用 EndInvoke,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8890489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com