Task <T>の代わりにTaskを返すのは明らかに間違っていますか?

OwenP

タスクAPIは、私がそれを使ってできるすべてのことが、DOよりもDO N'Tのが多いことを考えると、一種の失敗の落とし穴のように感じますしかし、私はそれをもっと使おうとしています、そして私はの問題全体について混乱していますasync void

私の問題は、アプリケーションがローカルデータファイルを永久に使用していて、高速な同期呼び出しが使用されていたために発生します。現在、いくつかのリモートソースはオプションであり、十分な遅延があります。すべてを非同期に切り替えています。

だから私はおそらくこのように見える方法を持っています:

void InitializeData() {
    SomeProperty = _dataSource.Load(...);
}

低摩擦のために私がやりたい素朴なことは次のとおりです。

Task InitializeDataAsync() {
    return Task.Run(() => {
        SomeProperty = _dataSource.Load(...);
    });
}

しかしasync voidそれを使用することがどれほどひどいのかについての記事は非常に多く、タスクを返すことについての議論ではぼやけているようです。だから、本当にそれを次のように書くための私の最良の選択肢です:

Task<DataType> FetchDataAsync() {
    return _dataSource.LoadAsync(...);
}

...次に、すべての発信者を追跡し、準拠させますか?

async void動作が異なりasync Task、UnobservedTaskExceptionを使用すると恐ろしいため、人々の主張は悪いと思いますawaitこの状況では、を使用する可能性はほとんどありませんawaitまたは、awaitを使用する場合は、UnobservedTaskExceptionについてすでに偏執的であるため、常にtry / catchが発生します。

そう:

  • 「使わない」は「使わないasync void」と同じTaskですか?
  • を使用しない場合await、それはそれを軽減しますか?
  • を使用する場合await、常にtry / catchでラップすると問題が軽減されますか?
Titian Cernicova-Dragomir

async voidを返すことと同じではありませんTaskの問題async voidは、タスクの例外(グローバル例外ハンドラー以外)を監視する方法がなく、タスクが完了するのを待つ方法がないことです(実際にはメソッドがないためawaitasync voidメソッドを実行できませんawait)。これが理由です。避けるべきです。

戻るTaskあなたの場合、これらの問題を持っていないawait、それが完了し、あなたが戻って待つ例外が取得されますときにあなたが知っているTask完全に許容です。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Task.Factory.StartNew <T>とTask <T> .Factory.StartNewの間に違いはありますか?

分類Dev

WebAPIコントローラーでTask <ActionResult <IEnumerable <T >>>の代わりにIAsyncEnumerable <T>を使用できますか(または使用する必要があります)

分類Dev

IAsyncEnumerable <T>とイテレータによって生成されたIEnumerable <Task <T >>の違いは何ですか?

分類Dev

Task <T>ではなくTaskのみを返すメソッドから何を返しますか?

分類Dev

Task <object>をTask <T>に変換します。Tは不明です。

分類Dev

Task <T>からTを取得する

分類Dev

待たずにTask <T>を返す方法

分類Dev

C#で「Task <IEnumerable <T >>」を繰り返しますか?

分類Dev

Windows Task Scheduler, run task if task isn't running?

分類Dev

EFコアクエリからTask <IReadOnlyCollection <T >>を待たずに返しますか?

分類Dev

Task <T>が共変ではないのはなぜですか?

分類Dev

Task.Delay(0)とTask.FromResult(0)に代わるものはありますか?

分類Dev

What is the difference between await Task<T> and Task<T>.Result?

分類Dev

AsyncUnaryCall <T>などがTask <T>を拡張しないのはなぜですか?

分類Dev

Task <T>を返すメソッドを作成して同期的に実行できますか?

分類Dev

TaskとTask <T>は交換可能ですか?

分類Dev

C#非同期メソッドの戻り型をTask <T>またはvoid以外のものにすることは可能ですか?

分類Dev

「<T> Future <T> submit(Callable <T> task)」の最初の<T>は何の略ですか?

分類Dev

例外処理を除いて、IEnumerable <Task <T >>をIObservable <T>に変換します

分類Dev

C#での非同期Func <Task <T >>の3つの呼び出しの違いは何ですか?

分類Dev

Task <T>を返す非同期関数からエラーを返す方法

分類Dev

Thread.Sleepの代わりに常にTask.Delayを使用する必要がありますか?

分類Dev

void、Task、またはTask <T>を返さないメソッドで何かを待つ適切な方法は?

分類Dev

ExecutorService.submit(Runnable task、T result)の「結果」は何をしますか?

分類Dev

待機を含むメソッドからTask.FromResult <T>(T result)を使用するのはなぜですか?

分類Dev

Task <T>のデフォルト値またはnullを返します

分類Dev

非同期メソッドのシグネチャエラー。void、Task、またはTask <T>を返す必要があります

分類Dev

ayncメソッドの呼び出し時にList <T>ではなくTask <List <T >>を返すasyncawait

分類Dev

async / awaitを削除するとTask <T>からTask <object>への変換エラーが発生するのはなぜですか

Related 関連記事

  1. 1

    Task.Factory.StartNew <T>とTask <T> .Factory.StartNewの間に違いはありますか?

  2. 2

    WebAPIコントローラーでTask <ActionResult <IEnumerable <T >>>の代わりにIAsyncEnumerable <T>を使用できますか(または使用する必要があります)

  3. 3

    IAsyncEnumerable <T>とイテレータによって生成されたIEnumerable <Task <T >>の違いは何ですか?

  4. 4

    Task <T>ではなくTaskのみを返すメソッドから何を返しますか?

  5. 5

    Task <object>をTask <T>に変換します。Tは不明です。

  6. 6

    Task <T>からTを取得する

  7. 7

    待たずにTask <T>を返す方法

  8. 8

    C#で「Task <IEnumerable <T >>」を繰り返しますか?

  9. 9

    Windows Task Scheduler, run task if task isn't running?

  10. 10

    EFコアクエリからTask <IReadOnlyCollection <T >>を待たずに返しますか?

  11. 11

    Task <T>が共変ではないのはなぜですか?

  12. 12

    Task.Delay(0)とTask.FromResult(0)に代わるものはありますか?

  13. 13

    What is the difference between await Task<T> and Task<T>.Result?

  14. 14

    AsyncUnaryCall <T>などがTask <T>を拡張しないのはなぜですか?

  15. 15

    Task <T>を返すメソッドを作成して同期的に実行できますか?

  16. 16

    TaskとTask <T>は交換可能ですか?

  17. 17

    C#非同期メソッドの戻り型をTask <T>またはvoid以外のものにすることは可能ですか?

  18. 18

    「<T> Future <T> submit(Callable <T> task)」の最初の<T>は何の略ですか?

  19. 19

    例外処理を除いて、IEnumerable <Task <T >>をIObservable <T>に変換します

  20. 20

    C#での非同期Func <Task <T >>の3つの呼び出しの違いは何ですか?

  21. 21

    Task <T>を返す非同期関数からエラーを返す方法

  22. 22

    Thread.Sleepの代わりに常にTask.Delayを使用する必要がありますか?

  23. 23

    void、Task、またはTask <T>を返さないメソッドで何かを待つ適切な方法は?

  24. 24

    ExecutorService.submit(Runnable task、T result)の「結果」は何をしますか?

  25. 25

    待機を含むメソッドからTask.FromResult <T>(T result)を使用するのはなぜですか?

  26. 26

    Task <T>のデフォルト値またはnullを返します

  27. 27

    非同期メソッドのシグネチャエラー。void、Task、またはTask <T>を返す必要があります

  28. 28

    ayncメソッドの呼び出し時にList <T>ではなくTask <List <T >>を返すasyncawait

  29. 29

    async / awaitを削除するとTask <T>からTask <object>への変換エラーが発生するのはなぜですか

ホットタグ

アーカイブ