[英]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”)?
我試過了:
Task
代替void
,但隨后無法將函數分配給Click事件。 注意:這是一個簡化的示例。 在我的真實代碼中,我正在調用一系列異步方法,所有方法都返回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.