c# - Awaitable 方法 - 完成时调用事件

标签 c# async-await

我有调用异步方法的同步方法:

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/

相关文章:

c# - 从 Task.Run 获取返回值

c# - 我可以动态使用模板吗?

asynchronous - 在 Google Apps 脚本上运行异步函数

c# - 处理 C# AggregateException 的正确方法

c# - ValidationRule ValidatesOnTargetUpdated NullReferenceException 在设计时

c# - 如何在ASP.NET Web API中使用非线程安全的异步/等待API和模式?

c# - 等待 Async Void 方法调用以进行单元测试

c# - 帮助优化整数数学

c# - 上传大量用户的大文件的最佳方式是什么?

c# - 将间接引用的程序集复制到输出目录 - 缺少程序集