私はレイヤ間で非同期で通信するためのベストプラクティスを探しています。 私が自動生成されたコードでこれを見たので、現在、私はモデルでのBackgroundWorkerを使うmvvm light toolkitMVVMで何が非同期ですか? ModelまたはViewModelです。ベストプラクティス?
を使用しています。バックグラウンドワーカーではなく非同期コール。
public void GetConfig(Action<Config, Exception> callback)
{
BackgroundWorker backgroundWorker = new BackgroundWorker();
backgroundWorker.DoWork += (backgroundWorkerSender, backgroundWorkerArgs) =>
{
try
{
backgroundWorkerArgs.Result = AppEnvironment.Instance.Config;
}
catch (Exception exception)
{
backgroundWorkerArgs.Result = null;
}
};
backgroundWorker.RunWorkerCompleted += (backgroundWorkerSender, backgroundWorkerArgs) =>
{
if (backgroundWorkerArgs.Result != null)
{
callback((Config) backgroundWorkerArgs.Result, null);
}
else
{
/* ToDo: exceptionhandling */
}
};
backgroundWorker.RunWorkerAsync();
}
は今、私はViewModelに非同期一部を実装
AsyncDelegateCommandを見つけました。
private ICommand _refreshObjectDefinitionCommand;
public ICommand RefreshObjectDefinitionCommand
{
get
{
return _refreshObjectDefinitionCommand
?? (_refreshObjectDefinitionCommand = new AsyncDelegateCommand(delegate
{
IsBusy = true;
_dataService.GetObjectDefinition(
(xmlObjectDef, errorConfig) =>
{
if (errorConfig != null)
{
/* ToDo Lenz: exceptionhandling */
return;
}
ObjectDefinition = xmlObjectDef;
});
_dataService.GetObjectDefinitionTreeView(
(treenodes, errorConfig) =>
{
if (errorConfig != null)
{
/* ToDo Lenz: exceptionhandling */
return;
}
TreeNodes = treenodes;
});
},
() => _isConnected, o => IsBusy = false, exception => IsBusy = false));
}
}
私はベストプラクティスについて少し混乱していますか?私は多くの記事を読んだ。しかし、どういうわけか彼らはいつも異なった意見です。維持するための通常の努力の下で最良の互換性を提供する規定はありますか?
考え
モデルのためのいくつかの食べ物:
http://csharperimage.jeremylikness.com/2009/12/simplifying-asynchronous-calls-in.html
http://www.dzone.com/articles/mvvmlight-and-async
のViewModel
http://www.codeproject.com/Articles/123183/Asynchronus-MVVM-Stop-the-Dreaded-Dead-GUI-Problem
タスクパターンを読みやすくすることはできませんか? async/await .. – JustAnotherUserYouMayKnow
もちろんですが、私が知っている限り、それは.net 4.5以降利用可能ですか?!? –
4.0とsilverlight 5をサポートするNuGetパッケージがあります。これをあなたのプロジェクトにインストールすれば、それは魅力的です! http://nuget.org/packages/Microsoft.CompilerServices.AsyncTargetingPack/ – JustAnotherUserYouMayKnow