使用异步

时间:2016-03-10 03:48:48

标签: c# asp.net asynchronous webforms

如果我只是运行其中一个异步事件,那么一切都会按照应有的顺序执行。但是,当我添加所有3个事件时,我(从我收集的内容)得到了语法的超时。这是一个完整的堆栈跟踪,希望有所帮助。

  


System.Web.HttpUnhandledException(0x80004005):抛出了类型为“System.Web.HttpUnhandledException”的异常。 ---> System.NullReferenceException:对象引用未设置为对象的实例。
     在System.Web.UI.Page.d__554.MoveNext()
     在System.Web.UI.Page.HandleError(例外e)
     在System.Web.UI.Page.d__554.MoveNext()
  ---从抛出异常的先前位置开始的堆栈跟踪结束---
     在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)      在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)
     在System.Web.TaskAsyncHelper.EndTask(IAsyncResult ar)
     在System.Web.UI.Page.AsyncPageEndProcessRequest(IAsyncResult结果)
     在ASP:pages_AsyncTest1_aspx.EndProcessRequest(IAsyncResult ar)中的c:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files \ vs \ 14a1541c \ 96dbdee3 \ App_Web_AsyncTest1.aspx.f9b0821e.cqtg2bnc.0.cs:第0行      在System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
     在System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean& completedSynchronously)
  异常类型:System.Web.HttpUnhandledException
  消息:抛出了类型'System.Web.HttpUnhandledException'的异常。
  堆栈跟踪:
     在System.Web.UI.Page.HandleError(例外e)
     在System.Web.UI.Page.d__554.MoveNext()
  ---从抛出异常的先前位置开始的堆栈跟踪结束---
     在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
     在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)
     在System.Web.TaskAsyncHelper.EndTask(IAsyncResult ar)
     在System.Web.UI.Page.AsyncPageEndProcessRequest(IAsyncResult结果)
     在ASP:pages_AsyncTest1_aspx.EndProcessRequest(IAsyncResult ar)中的c:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files \ vs \ 14a1541c \ 96dbdee3 \ App_Web_AsyncTest1.aspx.f9b0821e.cqtg2bnc.0.cs:第0行      在System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
     在System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean& completedSynchronously)

这是我想要执行的C#语法:

namespace CEDS
{
  public partial class BBLL : System.Web.UI.UserControl
  {
      private DataSet DS = new DataSet();
      private DataSet DS1 = new DataSet();
      private DataSet DS2 = new DataSet();

      protected void Page_Load(object sender, EventArgs e)
      {
        if (!IsPostBack)
        {
            Page.RegisterAsyncTask(new PageAsyncTask(RunSQLUSP)); 
        }
      }
      public async System.Threading.Tasks.Task RunSQLUSP()
      {
          var t1 = GetDataForDropDown1();
          var t2 = GetDataForDropDown2();
          var t3 = GetDataForDropDown3();
          //This line is hit then error is thrown 
          await System.Threading.Tasks.Task.WhenAll(t1, t2, t3);

          //Bind Data to grids/dropdowns

        }
    }
}

async System.Threading.Tasks.Task<DataSet> GetDataForDropDown1()
{   
  DS = GetDataForDropDown1();
  return DS;            
}
async System.Threading.Tasks.Task<DataSet> GetDataForDropDown2()
{   
  DS2 = GetDataForDropDown2();
  return DS2;           
}
async System.Threading.Tasks.Task<DataSet> GetDataForDropDown3()
{   
  DS = GetDataForDropDown3();
  return DS;          
}

1 个答案:

答案 0 :(得分:6)

请参阅此answer

您需要在aspx上设置AsyncTimeout属性。异常的原因是您的异步​​操作超出了我猜测默认的当前AsyncTimeout值。该值应以毫秒为单位。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="BBLL.aspx.cs" Inherits="Sample03.Default" Async="true" AsyncTimeout="600000" %> //10 mins