c# - 在完成当前异步方法(wpf)之前允许所有正在运行的任务完成的通用方法?
问题描述
wpf
我有一个主窗口,它在他们自己的窗口对话框中打开几个用户控件。每个用户控件都有自己的 ViewModel。这些用户控件又具有多个自定义控件。为了高度模块化,我允许自定义控件使用 asnyc/await 来读取/写入网络服务器。
用户可以通过单击右上角的“X”来关闭每个 UserControl。发生这种情况时,程序执行将传递给 UserControl 的 ViewModel 中的 OnWindowClosingAsync 处理程序。
public async Task OnWindowClosingAsync(object s, CancelEventArgs e)
{
WindowDialog w = (WindowDialog)s;
if (OkToClose)
{
e.Cancel = false; // e.Cancel = false allows closing the window.
return;
}
OkToClose = false;
// Cancel window closure until all running tasks have completed..
e.Cancel = true; // e.Cancel = true keeps window open.
w.IsEnabled = false; // Consider w.Hide(). Stop further user interaction with this window. (Window is dimmed).
....more code ...
await Task.Yield(); <--**FAILS TO WAIT FOR OTHER TASKS TO COMPLETE.
OkToClose = true;
WritingLayer.Dispose();
// Manually closing the windowdialog will force reentry into OnWindowClosingAsync(), (i.e., this procedure).
w.Close();
}
我希望的想法是 Task.Yield 将在 Task.Yield 之后将 OnWindowClosingAsync() 代码放在 Task que 的底部,并允许任何当前正在运行的任务在继续关闭 UserControl 之前完成。此代码当然不起作用。显然,Task.Yield 正在添加它后面的代码以异步运行,但它不会强制其他正在运行的任务在继续之前完成。(比如保存数据的任务)。
那么,在执行 Task.Yield 之后的代码之前,是否有一种很好的通用方法可以让所有正在运行的任务(无论其上下文如何)完成?
TIA
解决方案
推荐阅读
- swift - UIStackView 在 tableView Cell didSet 中添加排列子视图
- unity3d - How to access a Unity's TextMesh Pro Dropdown component via code?
- python-3.x - 此密码检查程序的终止开关
- python - 递归编程迷宫解决方案
- xcode - 如何删除 iOS 模拟器的首选项
- javascript - 最高分词
- php - 如何使用 CodeIgniter 从 result_array() 中删除一行
- php - Update an ID after getting it with GET
- javascript - Question about setTimeout that I need answer to
- ios - 需要 UI 输入的单元测试?