【发布时间】:2015-06-02 15:10:02
【问题描述】:
最近我开始使用多线程,并试图更好地理解 await/async 和 Task。我输入了以下场景:
private void button1_Click(object sender, EventArgs e)
{
var list = GenerateList();
progressBar1.Maximum = list.Count ();
CreateStuff (list));
MessageBox.Show ("Complete!");
}
async void CreateStuff (List<int> list)
{
//additional Parameters here used for DoWork()
await Task.Run (()=>Parallel.ForEach(list, item =>
{
DoWork();
Invoke(new Action(() => progressBar1.PerformStep()));
}));
//do something that relies on list
}
我正在尝试在 CreateDocs 方法完成后显示消息框。一位同行告诉我,可以在 CreateStuff() 方法中继续使用 await async,并在显示消息框之前仍然等待该方法完成。我一直在研究 await async 和 Task 一段时间,但似乎无法弄清楚如何做到这一点。
对我来说,让 button1_Click() 使用 await 异步,然后 await CreateStuff() 方法似乎更容易。
我的问题是:是否可以在 CreateStuff 方法中继续使用 await async 并在显示消息框之前仍然等待 button1_Click() 中的 CreateStuff() 方法完成?
我假设它与返回任务有关,但我不太清楚如何进行。
感谢任何帮助。谢谢!
【问题讨论】:
标签: c# multithreading asynchronous