非同期タスクがバックグラウンドで実行されていませんか?

ナビーン

私はAsyncで遊んでいて、以下のサンプルプログラムを作成しました。サンプルプログラムは、同期操作と非同期操作に費やされた時間を比較します

タスクがバックグラウンドスレッドで並行して実行されることを考えると、非同期操作にかかる時間は短くなると予想していました。ただし、以下のプログラムは、同期操作と非同期操作の両方に同じ時間がかかります。私は何かが足りないと思いますが、どこでも非同期タスクを作成して実行するために次の例を取得します

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace AsyncTest {
    class Program {

    private static long max = 100;

    static void Main(string[] args) {
        var startTime = DateTime.Now;
        Console.WriteLine("Start Process at");

        //Normal();    //takes about 20 secs
        MainAsync().Wait();     //takes about 20 secs

        Console.WriteLine($"Total Time Taken {DateTime.Now.Subtract(startTime).TotalMilliseconds} ms");
        Console.ReadKey();

    }

    static void Normal() {
        for (long i = 0; i <= max; ++i) {
            Thread.Sleep(200);
        }
    }

    static async Task MainAsync() {
        var runner = new Runner();

        for (int i = 0; i <= 100; ++i) {
            await runner.Run(i, max / 100);
        }
    }

}

public class Runner {
    public async Task Run(int idx, long max) {
        await Task.Run(() => {
            for (long i = 1; i <= max; ++i) {
                Console.WriteLine($"Task {idx} - {i}");
                Thread.Sleep(200);
            }
        });
    }
}

}

私がここで何が欠けているのか助けはありますか?

アンドレイ・ナソノフ

最初の問題は、タスクを順番に実行していることです。

for (int i = 0; i <= 100; ++i) {
    await runner.Run(i, max / 100);
}

タスクを開始し、完了するまで待ってから、反復を続行します。次のように変更するだけです。

await Task.WhenAll(Enumerable.Range(0, 101).Select(i => runner.Run(i, max / 100)));

2番目の問題は、同期Thread.Sleep呼び出しの使用です。交換してくださいThread.Sleep(200)await Task.Delay(200)Thread.Sleep一部の作業をシミュレートするために使用することは問題ありませんが、待機したいだけの場合はTPL(async-await)で使用しないでください。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

非同期タスクがバックグラウンドで実行されていませんか?

分類Dev

Androidサービスがバックグラウンドで実行されていませんか?

分類Dev

UWPバックグラウンドタスクが実行されていません

分類Dev

IOバウンド非同期タスクは非同期で実行されません

分類Dev

バックグラウンドプロセスが実行されていませんか?

分類Dev

Androidサービスがバックグラウンドで正しく実行されていません

分類Dev

バックグラウンドで実行中に非同期タスクエラーが発生しました

分類Dev

バックグラウンドで実行中に非同期タスクエラーが発生しました

分類Dev

Dockerized Webサービスは、デタッチされたフラグがあってもバックグラウンドで実行されません

分類Dev

バックグラウンドで実行されているプロセスからSTDOutを読み取ることができません

分類Dev

バックグラウンドタスクがキューに入れられ、実行されていません

分類Dev

Pythonスクリプトがバックグラウンドで実行されている場合、mplayerは機能しません

分類Dev

NSManagedObjectContext performBlockAndWait:バックグラウンドスレッドで実行されませんか?

分類Dev

小さな非同期タスクがフォアグラウンドを更新できるようにしながら、長時間実行される並列タスクをバックグラウンドで実行する

分類Dev

c#複数のタスクが互いにブロックせずにバックグラウンドで独立して実行されている

分類Dev

非同期メソッドがシングルスレッドの場合、バックグラウンドでどのように実行できますか?

分類Dev

バックグラウンドスレッドで実行されているタスクからアニメーションを開始します

分類Dev

アプリがフォアグラウンドまたはバックグラウンドで実行されているかどうかを確認します(同期アダプターを使用)

分類Dev

python:バックグラウンドスレッドが生きている場合、weakref.finalizeは実行されません

分類Dev

Android O:バックグラウンド実行は許可されていません:許可を得たカスタムブロードキャスト

分類Dev

(Django)非同期サーバータスクをバックグラウンドで継続的に実行する

分類Dev

ステップカウンターはデフォルトでバックグラウンドで実行されていますか?

分類Dev

authenticate()がカスタム認証バックエンドで実行されていません

分類Dev

IISでホストされているWCFサービスはバックグラウンドタスクを実行できますか?

分類Dev

スレッドがバックグラウンドで実行されていないようです

分類Dev

再起動後にバックグラウンドでpostgresの複数のインスタンスが実行されているのはなぜですか?

分類Dev

Tclスクリプトがバックグラウンドプロセスで実行されているかどうかを検出します

分類Dev

Xamarinフォームのバックグラウンドタスクは、アプリがiOSで開いている場合にのみ実行されます

分類Dev

Xamarinフォームのバックグラウンドタスクは、アプリがiOSで開いている場合にのみ実行されます

Related 関連記事

  1. 1

    非同期タスクがバックグラウンドで実行されていませんか?

  2. 2

    Androidサービスがバックグラウンドで実行されていませんか?

  3. 3

    UWPバックグラウンドタスクが実行されていません

  4. 4

    IOバウンド非同期タスクは非同期で実行されません

  5. 5

    バックグラウンドプロセスが実行されていませんか?

  6. 6

    Androidサービスがバックグラウンドで正しく実行されていません

  7. 7

    バックグラウンドで実行中に非同期タスクエラーが発生しました

  8. 8

    バックグラウンドで実行中に非同期タスクエラーが発生しました

  9. 9

    Dockerized Webサービスは、デタッチされたフラグがあってもバックグラウンドで実行されません

  10. 10

    バックグラウンドで実行されているプロセスからSTDOutを読み取ることができません

  11. 11

    バックグラウンドタスクがキューに入れられ、実行されていません

  12. 12

    Pythonスクリプトがバックグラウンドで実行されている場合、mplayerは機能しません

  13. 13

    NSManagedObjectContext performBlockAndWait:バックグラウンドスレッドで実行されませんか?

  14. 14

    小さな非同期タスクがフォアグラウンドを更新できるようにしながら、長時間実行される並列タスクをバックグラウンドで実行する

  15. 15

    c#複数のタスクが互いにブロックせずにバックグラウンドで独立して実行されている

  16. 16

    非同期メソッドがシングルスレッドの場合、バックグラウンドでどのように実行できますか?

  17. 17

    バックグラウンドスレッドで実行されているタスクからアニメーションを開始します

  18. 18

    アプリがフォアグラウンドまたはバックグラウンドで実行されているかどうかを確認します(同期アダプターを使用)

  19. 19

    python:バックグラウンドスレッドが生きている場合、weakref.finalizeは実行されません

  20. 20

    Android O:バックグラウンド実行は許可されていません:許可を得たカスタムブロードキャスト

  21. 21

    (Django)非同期サーバータスクをバックグラウンドで継続的に実行する

  22. 22

    ステップカウンターはデフォルトでバックグラウンドで実行されていますか?

  23. 23

    authenticate()がカスタム認証バックエンドで実行されていません

  24. 24

    IISでホストされているWCFサービスはバックグラウンドタスクを実行できますか?

  25. 25

    スレッドがバックグラウンドで実行されていないようです

  26. 26

    再起動後にバックグラウンドでpostgresの複数のインスタンスが実行されているのはなぜですか?

  27. 27

    Tclスクリプトがバックグラウンドプロセスで実行されているかどうかを検出します

  28. 28

    Xamarinフォームのバックグラウンドタスクは、アプリがiOSで開いている場合にのみ実行されます

  29. 29

    Xamarinフォームのバックグラウンドタスクは、アプリがiOSで開いている場合にのみ実行されます

ホットタグ

アーカイブ