gpt4 book ai didi

c# - wpf 应用程序中的异步/等待方法

转载 作者:行者123 更新时间:2023-11-30 19:27:10 25 4
gpt4 key购买 nike

我有这样的疑问。例如,我使用 mvvm 模式动态创建自定义 userControl。所以我发送了一个命令来创建一个 userControl。所以创作看起来像

private async Task<bool> OnAddUserControl1(List<ALV_VM_ADWERT> control)
{
try
{
_cancellationTokenSource = new CancellationTokenSource();
var userControl = _userControlsContainer.CreateUserControl1(control);

var task1 = Task.Factory.StartNew(() =>
{
userControl.ViewModel.InOperationEvent += OnUsercontrolInOperationChanged;
userControl.ViewModel.ValueTypeChangedEvent += OnValueTypeChanged;
userControl.ViewModel.SetExpandableName += OnSetExpandableName;
}, _cancellationTokenSource.Token, TaskCreationOptions.AttachedToParent, TaskScheduler.FromCurrentSynchronizationContext());

var task2 = Task.Factory.StartNew(() => FinalCreatingStep(userControl, control[0].RAUMNAME.Trim()), _cancellationTokenSource.Token, TaskCreationOptions.AttachedToParent, TaskScheduler.FromCurrentSynchronizationContext());
await Task.WhenAll(task1, task2);
return true;
}
catch (Exception)
{
return false;
}
}

我的问题是 - 创建子任务是否有意义,还是让代码没有子任务更好?如果答案是肯定的,那么我应该让所有方法都异步吗?如果不是,我不应该将哪些方法设为异步?

最佳答案

那些事件订阅真的需要异步吗?您可能过于努力地尝试使用异步代码。

用户控件构造函数通常是最耗时的部分,必须在UI线程上完成。一般只在涉及某种形式的IO或处理时才需要异步操作;

  • 阅读文件
  • 写文件
  • 处理大型数据集
  • 跨越进程边界与服务器对话或连接设备

简而言之,异步任务在这里可能有点矫枉过正。

关于c# - wpf 应用程序中的异步/等待方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19421973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com