我有调用异步方法的同步方法:
private void Sync_Click(object sender, EventArgs e)
{
CancellationToken token = new CancellationToken();
SyncAllMappings(token);
}
async void SyncAllMappings(CancellationToken token)
{
//create collection of tasks per each mapping
IEnumerable<Task<Task>> tasks = SomeLogicHere();
await Task.WhenAll(tasks);
}
在所有任务完成之前控制返回给用户。 当所有任务都完成时,是否有可能得到通知?我希望能够调用一些其他方法,当所有任务完成(并且所有映射都同步)时,该方法将显示文本并启用几个按钮。
SyncAllMappings
方法在不同的程序集中。业务层和 UI 层是分开的。我不想直接在 SyncAllMappings
中调用 UI 方法。
最佳答案
你必须让你的事件处理程序异步并等待它,当任务完成时做一些 UI 工作:
private async void Sync_Click(object sender, EventArgs e)
{
CancellationToken token = new CancellationToken();
await SyncAllMappings(token);
// do buttons enable disabling here
}
您的第二个方法应该返回 Task
而不是 void
:
async Task SyncAllMappings(CancellationToken token)
{
//create collection of tasks per each mapping
IEnumerable<Task<Task>> tasks = SomeLogicHere();
await Task.WhenAll(tasks);
}
关于c# - Awaitable 方法 - 完成时调用事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36036014/