これは、同期メソッドで非同期メソッドを呼び出すより良い方法ですか?
public bool Sync()
{
return Task.Run(() => MyClass.IsSyncDone()).Result;
}
それはデッドロックを引き起こしますか?私は本当に良い方法を知る必要があります。システムコール、つまりアプリの起動、登録されたメソッドなどと非同期にしたくないので、誰でも助けてください。
これは、同期メソッドで非同期メソッドを呼び出すより良い方法ですか?
public bool Sync()
{
return Task.Run(() => MyClass.IsSyncDone()).Result;
}
それはデッドロックを引き起こしますか?私は本当に良い方法を知る必要があります。システムコール、つまりアプリの起動、登録されたメソッドなどと非同期にしたくないので、誰でも助けてください。
応答が必要ない場合は、次のように簡単に実行できます。
public bool Sync()
{
Task.Run(async () => await MyClass.DoSync());
}
応答が必要ということは、より複雑なコードを意味します。完全なコードを見ないと具体的な例を示すのは難しいですが、一般的には、このような長時間実行される複雑な非同期操作を同期操作に結び付けない方がよいでしょう。
継続を async メソッドに渡してタスクを介して作成するか、終了時に async メソッドでビューモデルのバインドされたプロパティを更新するか、カスタム イベントを発生させます。
アプリケーションの livecycle イベント ハンドラーで長時間実行される可能性のある非同期操作を実行しないことが重要です。実行に時間がかかると、アプリケーションが強制的に終了されたり、アプリ データが一貫性のない状態のままになったりする可能性があります。