我有這樣的問題。例如,我使用mvvm模式動態創建自定義userControl。所以我發佈了一個命令來創建一個userControl。因此,創建看起來像異步/等待wpf應用程序中的方法
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;
}
}
和我的問題是 - 它是否意願創建子任務,或者最好有沒有子任務的代碼?如果答案是肯定的,那麼我應該使所有方法異步?如果不是,我不應該做什麼方法異步?
可能是,但我正在使用來自數據庫的信息創建userControl,並且在開始時,它可以是數百個控件或更多。那麼沒有兒童任務的這種方法會更好嗎?對? – Sasha
@Sasha我的建議是將任務檢出數據並將BeginInvoke發送到Dispatcher FOR EACH(這對於調度員正常工作很重要),以控制您想要創建的任務。 – Gusdor
謝謝你的幫助。 – Sasha