私はTask
とTask<T>
を返すメソッドを公開するサードパーティ製のDLLを使用しています。私はこのアセンブリまたはインターフェイスを制御することはできません。私は、メソッドの名前がAsync()であるため、すべてが非同期である必要があると仮定しました。非同期コードがない場合、タスクを返すサードパーティのインターフェイスをどのように処理しますか?
実際、非同期コードが実行されていない場合、どのようにインターフェイスを適切に実装すればよいですか?さらに
public class FooBar : IFoo
{
public async Task DoWorkAsync()
{
// Do Some Work
await Task.Yield();
}
public async Task<int> GetValueAsync()
{
// Do Some Work
var result = ...;
return Task.FromResult(result);
}
}
:
public interface IFoo
{
Task DoWorkAsync();
Task<int> GetValueAsync();
}
私の試みは、以下の通りであった著者がTask
/Task<T>
を返されたメソッドのみを露出させ、正しい
- ましたか?
- * Async()で接尾辞のメソッド名が正しく書かれていましたか?名前にAsyncを追加せずに非同期メソッドを記述すると、コード解析はエラーになりません。
私は 'Async'メソッドを呼び出すと「はい」と答えるでしょう。それをはっきりと簡単にします。あなたがアップグレードしていて、 'GetSomething'と' GetSomethingAsync'メソッドを持つように後方互換性を保つためにしようとしているとき。 – rbm
私は一般にあなたの2つのアプローチの前者を行います。待っていることが何もないなら、待つことは何もありません。不必要だと思われますが、第三者の図書館は彼らのものです。 – David
@David:2つの方法がありますが、どちらかが技術的にリターンを持たないため、タスクではなく単にタスクになっています。 –
michael