ASP.NET Webforms mit async/await

Meine Webforms-Anwendung, die basiert auf .Net 4.6 hat die Verwendung der async/await-Funktionalität Recht umfangreich. Weil ich bin ziemlich neu hier im async - /await-Thema, ich lese ziemlich viel von best practices wie diese oder diese. Aber ich habe noch einige Fragen, für die ich nicht gefunden habe keine klaren Informationen.

  1. In Bezug auf Page-Lifecycle-Events: ich weiß, dass z.B. für das Page_Load-Ereignis ist es am besten Praxis, um zu vermeiden, async void-Methoden und registrieren solche Methoden wie diese:
    protected void Page_Load(object sender, EventArgs e)
    {
       PageAsyncTask pageAsyncTask = new PageAsyncTask(SomeAsyncMethod);
       Page.RegisterAsyncTask(pageAsyncTask);
       //Method to invoke the registered async-methods immedietly and not after the PreRender-Event
       Page.ExecuteRegisteredAsyncTasks();
     }

    Mein problem ist, dass ich möchten, rufen Sie die async-Methode, sobald ich Sie registriert und nicht nach der OnPreRender-Ereignis. Erreicht werden soll dies durch den Aufruf der ExecuteRegisteredAsyncTasks()-Methode. Aber in meinem Fall hat keine Wirkung und die async-Methode ist immer noch aufgerufen wird, nachdem das PreRender-Ereignis. Aber warum?

  2. Über Steuerelement-Ereignisse: Ist es besser, sich zu registrieren async-Methoden auf die gleiche Weise, die ich erwähnt in dem code-Beispiel oben, oder kann ich den async void Signatur wie:
    protected async void OnClick(object sender, EventArgs e)
    {
    await SomeAsyncMethod();
    }

    Ich fand die beiden Beispiele aber keine klaren Informationen, welche die bessere Lösung ist-und warum.

  3. Bezüglich Kontext und ConfigureAwait, ist es am besten zu sein scheint, die Praxis zu verwenden await SomeAsyncMethod.ConfigureAwait(false) für eine bessere performance und der Kontext nicht wichtig ist und es nicht zu verwenden, wenn der Zusammenhang z.B. bei der Manipulation der GUI-Elemente. Aber in meinem Fall scheint es keinen Unterschied zu machen, wenn ich den Anruf await SomeAsyncMethod.ConfigureAwait(false) in meiner click-Ereignis. Ich kann immer noch manipulieren, meine GUI-Elemente ohne irgendwelche Probleme. Das Beispiel, das ich verwendet, war dies:
    private async void button1_Click(object sender, EventArgs e)
    {
      button1.Enabled = false;
      try
      {
        await SomeAsyncMethod().ConfigureAwait(false);
      }
      finally
      {
        //Manipulating still works even it's another context
        button1.Enabled = true;
      }
    }

Also ich Frage mich, warum die Manipulation der GUI-Elemente funktionieren noch und wenn ich Sie wirklich verwenden soll ConfigureAwait(false) auf jede async-Methode, wo der Kontext nicht wichtig, die ist ziemlich langweilig. Ich Frage mich, ob das hat etwas zu tun mit der Verwendung des Ajax-Funktionalität, die von Telerik die ich für meine Webapplication. Aber das ist nur eine Annahme.

Wenn Sie möchten, dass zum Rendern von Blöcken von code-Listen im Markdown-format, mit einem doppelten Gedankenstrich.
Ok, danke für die Bearbeitung.
Es gibt keine GUI in eine ASP.NET -Anwendung. WebForms gibt Sie ein Modell, das aussieht wie eine GUI, aber es ist nicht. Das sagte, ich glaube nicht, rufen ConfigureAwait(false) bei dieser Methode ist zu nennen, in ASP.NET APIs (wie button1.Enabled). Die meisten APIs, die nur gut funktionieren, aber es gibt ein paar, die scheitern, so dass ich nur auf Nummer sicher.

InformationsquelleAutor F. Huber | 2017-06-06

Schreibe einen Kommentar