ASP.Net:在Page_Load中调用异步方法

use*_*248 3 c# asp.net asynchronous async-await asp.net-web-api

我有这个API客户端,该客户端具有一个send方法,该方法用于将我的对象发布到Web API服务并返回类型为ReturnedResults的对象。现在,我需要在ASP.net page_load事件中运行此post方法。我在这里看到了类似的示例,但是我需要从异步方法中获取返回对象。

我知道我应该使用

PageAsyncTask t = new PageAsyncTask(APIService.Send("test"));
Run Code Online (Sandbox Code Playgroud)

但是我有两个问题,首先是PageAsyncTask不接受我的Send方法作为有效的Task类型,我猜这是因为我的方法返回Task类型的Task,所以它抱怨无法将Task转换为System.Func

另外,一旦成功执行,如何从中获得我的ReturnedResults对象?

mas*_*son 7

仅仅因为您不能等待a的结果PageAsyncTask并不意味着任务本身无法启动更多可以等待的功能。您可以利用此优势来加载异步页面。

public void Page_Load(object sender, EventArgs e)
{
    RegisterAsyncTask(new PageAsyncTask(PageLoadAsync));
}

public async Task PageLoadAsync()
{
    //perform your actions here, including calling async methods and awaiting their results

    Task<string> downloadTask = new WebClient().DownloadStringTaskAsync("http://www.example.com");

    TextBox1.Title = "We can do some actions while waiting for the task to complete";

    TextBox2.Title = await downloadTask;
}
Run Code Online (Sandbox Code Playgroud)

确保您的页面被标记为异步。

<%@ Page Language="C#" CodeBehind="Default.aspx.cs" Inherits="Default" Async="true" %>
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这似乎是一个很好的解决方案,但是如果我向我的方法添加参数,那么 PageAsyncTask 不接受它,并给我错误“无法将任务转换为 System.Func”。我需要参数,因为在将内容发布到 API 之前我必须对其进行处理。 (2认同)