在完成之前让Web API控制器等待IAsyncResult吗?

Hop*_*ppe 0 c# asynchronous async-await c#-5.0 asp.net-web-api

我有一个Web API控制器.它调用一个返回IAsyncResult的方法.当我调用控制器时,我收到错误

在异步操作仍处于挂起状态时完成异步模块或处理程序.

如何让控制器等待asyncresult?

我打算使用await,但我可能还没有弄清楚这个用例的语法.

我还没有找到关于SO的现有答案.

我正在使用c#4.5

[HttpGet]
[Route("GetGridDataAsync")]
public string GetGridDataAsync()
{
        var proxy = new Proxy();
        return proxy.BeginGetDataAsync("test", ar => proxy.EndGetDataAsync(ar));             
}

public IAsyncResult BeginGetDataAsync(string r, AsyncCallback callback){}

public DataResponse[] EndGetDataAsync(IAsyncResult asyncResult){}
Run Code Online (Sandbox Code Playgroud)

sa_*_*213 5

你可以让你的方法异步Task<string>,创建一个Task基础上,Async在方法Proxy类和await那个

例:

public async Task<string> GetGridDataAsync()
{
    var proxy = new Proxy();
    return await Task.Factory.FromAsync(proxy.BeginGetDataAsync, proxy.EndGetDataAsync, "test", null);   
}
Run Code Online (Sandbox Code Playgroud)

  • 你应该真的使用`Task.Factory.FromAsync(proxy.BeginGetDataAsync,proxy.EndGetDataAsync,"test",null)`. (2认同)