簡體   English   中英

帶有'Task.Factory.StartNew'的異步wpf事件不等待等待

[英]Async wpf event with 'Task.Factory.StartNew' does not wait for await

以下click button event首先用“ B”填充list ,然后用“ A”填充list

List<string> list = new List<string>();

private async void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
    await Task.Factory.StartNew(async () =>
    {
        await Task.Factory.StartNew(() => Thread.Sleep(1000));

        list.Add("A");
    });

    list.Add("B");
}

問:如何使用await異步概念強制在.Add(“ B”)之前執行.Add(“ A”)?

我試過了:

  1. 我嘗試用Task代替void ,但隨后無法將函數分配給Click事件。
  2. 我嘗試了Task.Wait()函數,但在更復雜的情況下,它導致死鎖。

注意:這是一個簡化的示例。 在我的真實代碼中,我正在調用一系列異步方法,所有方法都返回Task對象,並且都在等待,但它們仍未按我需要的順序運行。 我的實際代碼使用Task.Factory.StartNew()函數的方式完全相同。

出於Task.Factory.StartNew原因,您不應該使用Task.Factory.StartNew ,但是其中之一是,沒有可以接受Func<Task>Func<Task<T>>重載。

由於它不“了解”異步委托,因此它將在委托的初始同步部分完成后即在這種情況下立即返回,即在第一次到達await

您應該改用Task.Run

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM