如何使用HttpTaskAsyncHandler

Dar*_*der 5 .net c# asynchronous httptaskasynchandler

public class FooHandler  : HttpTaskAsyncHandler
{
    public override async Task ProcessRequestAsync(HttpContext context)
    {
        return await new AdRequest().ProcessRequest();
        // getting error here. "Return type of async type is void"
    }
}

public class FooRequest
{

    public async Task<String> ProcessRequest()
    {
        //return await "foo"; obviously nothing to wait here
    }

}
Run Code Online (Sandbox Code Playgroud)

我想创建一个异步处理程序,只想返回一个字符串.我怎样才能使这个工作?是否有使用Async方法和任务的简明参考?

Ste*_*ary 8

几点:

  • 您可以await任意Task从返回,而不仅仅是那些async方法.
  • async方法将返回值包装成Task<TResult>; 如果没有返回值,它们将返回值包装成一个Task.
  • 有几种方便的方法,例如,Task.FromResult如果你不需要async方法的开销.
  • 只有在async必须使用await它时才制作方法.如果您不需要制作方法async,请不要.

您可能会发现我的异步/等待介绍很有帮助.

public class FooHandler  : HttpTaskAsyncHandler
{
  public override Task ProcessRequestAsync(HttpContext context)
  {
    return new AdRequest().ProcessRequest();
  }
}

public class AdRequest
{
  public Task<String> ProcessRequest()
  {
    return Task.FromResult("foo");
  }
}
Run Code Online (Sandbox Code Playgroud)