盲目的に非同期APIを使用して、最高のものを期待する必要がありますか?
Windows Phoneプラットフォームでは、APIを使用する必要がasync
ありますが、「盲目的に」使用しないことをお勧めします。最初にそれらについて学びます。私のブログに役立つかもしれないasync
イントロがあります。
ユーザーが[保存]ボタンをタップしてデータモデルを保存するとします。すべての保存は非同期で行われます。これは、ユーザーがデータモデルの保存中にデータモデルの変更を中止できることを意味します。途中で変更すると、データが台無しになり、ファイルが破損しませんか?
はい。一般的な方法の1つは、リクエストが未処理のときにデータをコピーしたり、コントロールを無効にしたりすることです。たとえば、このコードは、保存が最初にリクエストされたときにデータをコピーし、保存が完了するまで保存ボタンを無効にします。
public async Task SaveAsync(MyData data) { ... }
// Logically, this is an asynchronous ICommand.Execute implementation.
public async void SaveCommand()
{
saveInProgress = true;
dirty = false;
MyData data = CopyData();
await SaveAsync(data);
saveInProgress = false;
}
// Logically, this is an ICommand.CanExecute implementation.
public bool CanSave { get { return !saveInProgress && dirty; } }
private bool saveInProgress, dirty;
スレッドを使用して保存する場合も、まったく同じ問題に直面します。
これにより、開発者はどのように簡単になりますか?
async
コードは、スレッドを使用するコードよりもはるかに保守しやすくなっています。