异步编程,挂在IIS上,但在IIS Express中可以正常运行

时间:2019-05-01 15:12:31

标签: c# .net asynchronous asp.net-core

我有一个挂起的文件,我有一个主意,它是由异步任务引起的,但是不确定如何解决它,并且调试实际上没有作用,因为它在Visual Studio上可以正常运行,但在IIS上无法正常运行。 / p>

我尝试使用ConfigureAwait(false);,我在某处阅读应该可以解决该问题,但无济于事,

我还尝试了其他方法来在其他页面中设置我的response.redirect并完成请求,但无济于事。

 Response.Redirect("Project.aspx", false);
 Context.ApplicationInstance.CompleteRequest();

这是我的代码。.如果有人可以将我指向正确的方向,谢谢?

    protected async void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                try
                {
                    LoggingController.log("Before Init Project");
                   await InitProject().ConfigureAwait(false); ;

                    LoggingController.log("After Init Project");
                }
                catch (Exception ex)
                {
                    LoggingController.log(ex);
                }
            }
            else
            {
                if (Request.Params["__EVENTTARGET"].Equals("RedirectBoard"))
                {
                    await Task.Run(() => gotoProject(Request.Params["__EVENTARGUMENT"])).ConfigureAwait(false); ;
                }
            }
        }


protected async Task InitProject()
        {
            try
            {
                // Login - temporary for fast testing
                if (Session["user"] == null)
                {
                    Response.Redirect("Login.aspx", false);
                    Context.ApplicationInstance.CompleteRequest();
                }
                else
                {
                    user = (Model.UserModel)Session["user"];
                }

                // Init variables
                int userID = user.User_ID;
                int role = user.Role;
                lists = new StringBuilder("const userID=" + userID + ";");

                // Start tasks
                // var timer = System.Diagnostics.Stopwatch.StartNew();
                // Task[] task = new Task[2];
                Task task0 = Task.Run(() => loadProject(userID, role));
                Task task1 = Task.Run(() => loadUser(userID));

                // Profile area
                var profile = (Image)Master.FindControl("profile");
                profile.ToolTip = user.Name;
                profile.ImageUrl = user.Avatar;
                new LanbanAuthentication().Authenticate(Response, user);

                // Wait all tasks to be completed
                await Task.WhenAll(task0, task1).ConfigureAwait(false);
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "projectScript", lists.ToString(), true);
            }
            catch (Exception ex)
            {
                LoggingController.log(ex.Message + " @ " + ex.Source + Environment.NewLine + ex.StackTrace);
            }
        }



        //1. Load all projects
        protected async Task loadProject(int userID, int role)
        {
            try
            {
                // Fetch all projects belong to or under supervised of this user
                ProjectAccess myAccess = new ProjectAccess();
                myAccess.fetchProject(userID, role);
                var project = myAccess.MyDataSet.Tables["Project"];

                Task task1 = Task.Run(() =>
                {
                    for (int i = 0; i < project.Rows.Count; i++)
                    {
                        var row = project.Rows[i];
                        if (row != null)
                            projectbrowser.Controls.Add(ProjectBox(row));
                    }
                });

                // Send project list in JSON to client for further processing
                Task task2 = Task.Run(() =>
                {
                    StringBuilder projectList = new StringBuilder("var projectList = ");
                    if (project != null)
                    {
                        projectList.Append(JsonConvert.SerializeObject(project));
                        projectList.Append(";");
                        lists.Append(projectList);
                    }
                });

                await Task.WhenAll(task1, task2).ConfigureAwait(false); ;
                myAccess.Dipose();
            }
            catch (Exception ex)
            {
                LoggingController.log(ex.Message + " @ " + ex.Source + Environment.NewLine + ex.StackTrace);
            }

            LoggingController.log("loadProject completed");
        }

 private void loadUser(int userID)
        {
            // Fetch data from database
            ProjectAccess myAccess = new ProjectAccess();
            myAccess.fetchSharedProjectUser(userID);
            var user = myAccess.MyDataSet.Tables["User"];

            // Send user list in JSON to client for further processing
            StringBuilder userList = new StringBuilder("var userList = ");
            userList.Append(JsonConvert.SerializeObject(user));
            userList.Append(";");
            lists.Append(userList);
            myAccess.Dipose();

            LoggingController.log("loadUser completed");
        }

我的一个异步处理程序

/// Async handler for request from client
public class ProjectHandler : IHttpAsyncHandler, IReadOnlySessionState
{
    public bool IsReusable { get { return false; } }

    public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback callback, Object state)
    {
        ProjectHandlerOperation operation = new ProjectHandlerOperation(callback, context, state);
        operation.QueueWork();
        return operation;
    }

    public void EndProcessRequest(IAsyncResult result)
    {

    }

    public void ProcessRequest(HttpContext context)
    {
        throw new InvalidOperationException();
    }
}

0 个答案:

没有答案