以下click button event
首先使用“B”填充list
,然后使用“A”填充。
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 async概念强制执行.Add(“A”).Add(“B”)?
我试过了:
void
替换为Task
,但无法将该功能分配给Click事件。 注意:这是一个简化的示例。我的真实世界代码我正在调用一系列异步方法,所有都返回Task
对象,所有都在等待,但它们仍然没有按照我需要的顺序运行。函数Task.Factory.StartNew()
以完全相同的方式用于我的真实代码。
答案 0 :(得分:4)
有a few reasons you shouldn't use Task.Factory.StartNew
,但其中一个是没有超载接受Func<Task>
或Func<Task<T>>
。
因为它不“理解”异步委托,所以它会在委托的初始同步部分完成后立即返回 - 即在它遇到第一个await
时立即返回,在这种情况下。
您应该使用Task.Run
代替。