非同期タスク内でのさまざまなコマンドの実行

user512737

私は静的クラスを持っており、そのクラス内には、シリアルポートに対してsetコマンドを継続的に処理する非同期タスクがあります。メソッドとプロパティを含むパブリッククラスをプログラマーに公開する場合、非同期タスク内でそれらをオンデマンドで実行するための最良の方法は何でしょうか?非同期タスクで何かをトリガーして、さまざまなコマンドを受け入れて実行するにはどうすればよいですか?これを行うためのパターンまたは明白な方法はありますか?

タスクと同じスレッドからすべてのコマンドを実行したいので、これを行う理由。一部のコマンドは事前に決定されてタスクに組み込まれていますが、その他のコマンドはスクリプトやcomオブジェクトなどの外部環境からのものですが、すべて同じシリアルポートに送信されるため、安全な方法で処理する必要があります。

助けていただければ幸いです。ありがとう

イヴイスラエル

生産者/消費者の例

public partial class Form1 : Form
{
    private CancellationTokenSource _cts;

    public Form1()
    {
        InitializeComponent();

    }

    private void Producer()
    {
        var id = 0;
        while (true )
        {
            CommandPool.Commands.Add($"Command {++id}");

            Thread.Sleep(500);

            if (_cts.IsCancellationRequested)
            {
                CommandPool.Commands.CompleteAdding();
                break;
            }
        }
        Debug.WriteLine("Producer finished");

    }

    private void Start(object sender, EventArgs e)
    {
        _cts = new CancellationTokenSource();
        CommandsComsumer.Run(_cts.Token);

        Task.Run(() => Producer(), _cts.Token);
    }

    private void Stop(object sender, EventArgs e)
    {
        _cts.Cancel();
    }
}

public static class CommandPool
{
    public static readonly BlockingCollection<string> Commands = new BlockingCollection<string>();
}

public static class CommandsComsumer
{
    private static CancellationToken _token;

    public static Task Run(CancellationToken cancellationToken)
    {
        _token = cancellationToken;
        return Task.Factory.StartNew(Consume, cancellationToken);
    }

    private static void Consume()
    {
        foreach (var cmd in CommandPool.Commands.GetConsumingEnumerable())
        {
            Debug.WriteLine(cmd);
        }

        Debug.WriteLine("Consumer finished");

    }
}

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

MvvmCrossコマンド内の非同期タスクが返されない

分類Dev

シェルスクリプトでさまざまな変数のコマンドを実行するには

分類Dev

コーンムのさまざまなタブで一連のコマンドを実行する

分類Dev

どのコードが実際に非同期/待機パターンで「マルチスレッド」で実行されますか?

分類Dev

nodejsとのさまざまなセッションでターミナルコマンドを実行する

分類Dev

VSIXでのカスタムコマンドの非同期実装

分類Dev

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

分類Dev

Alloy:さまざまな実行コマンドスコープを実行するためのコンパクトなJavaプログラム

分類Dev

「空の」非同期タスクを完了するためのさまざまな方法

分類Dev

LaravelElixirコマンドの非同期実行

分類Dev

参照なしで実行中の非同期クラスインスタンスはガベージコレクションを取得しますか?

分類Dev

実行時にコマンドにインターフェイスのさまざまな実装を挿入します

分類Dev

SSIS:SQLServerエージェントジョブタスクの実行非同期または同期で実行

分類Dev

非同期の問題、.thenの後にshelljsコマンドを実行できない

分類Dev

MVVMライトでの非同期コマンドの実行

分類Dev

サーバー上のさまざまな端末でコマンドを実行する

分類Dev

コレクション内のオブジェクトに対してさまざまな順序でいくつかのメソッドを実行する

分類Dev

さまざまなコンストラクターのコマンドライン引数

分類Dev

実装するインターフェースが非同期の場合、「この非同期メソッドには「await」演算子がなく、同期的に実行されます」という警告を抑制するにはどうすればよいですか?

分類Dev

さまざまなクエリでのストアドプロシージャの実行プランの比較

分類Dev

コマンドフォルダ内のコマンドファイルを非同期で実行する方法

分類Dev

非同期またはマルチスレッドコードでのコールバックの実行をテストする

分類Dev

cronieによって実行されると、Bashコマンドは非同期で実行されます

分類Dev

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

分類Dev

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

分類Dev

さまざまなコマンドを実行するためのインジケーターを作成するにはどうすればよいですか?

分類Dev

Pythonマルチプロセッシングでは、プロセスプールに非同期で渡されるさまざまな関数にさまざまなタイムアウトをどのように指定できますか?

分類Dev

このコードは非同期で実行されていますか?

分類Dev

コマンドラインとWindowsエクスプローラーでのWMICのさまざまな動作

Related 関連記事

  1. 1

    MvvmCrossコマンド内の非同期タスクが返されない

  2. 2

    シェルスクリプトでさまざまな変数のコマンドを実行するには

  3. 3

    コーンムのさまざまなタブで一連のコマンドを実行する

  4. 4

    どのコードが実際に非同期/待機パターンで「マルチスレッド」で実行されますか?

  5. 5

    nodejsとのさまざまなセッションでターミナルコマンドを実行する

  6. 6

    VSIXでのカスタムコマンドの非同期実装

  7. 7

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

  8. 8

    Alloy:さまざまな実行コマンドスコープを実行するためのコンパクトなJavaプログラム

  9. 9

    「空の」非同期タスクを完了するためのさまざまな方法

  10. 10

    LaravelElixirコマンドの非同期実行

  11. 11

    参照なしで実行中の非同期クラスインスタンスはガベージコレクションを取得しますか?

  12. 12

    実行時にコマンドにインターフェイスのさまざまな実装を挿入します

  13. 13

    SSIS:SQLServerエージェントジョブタスクの実行非同期または同期で実行

  14. 14

    非同期の問題、.thenの後にshelljsコマンドを実行できない

  15. 15

    MVVMライトでの非同期コマンドの実行

  16. 16

    サーバー上のさまざまな端末でコマンドを実行する

  17. 17

    コレクション内のオブジェクトに対してさまざまな順序でいくつかのメソッドを実行する

  18. 18

    さまざまなコンストラクターのコマンドライン引数

  19. 19

    実装するインターフェースが非同期の場合、「この非同期メソッドには「await」演算子がなく、同期的に実行されます」という警告を抑制するにはどうすればよいですか?

  20. 20

    さまざまなクエリでのストアドプロシージャの実行プランの比較

  21. 21

    コマンドフォルダ内のコマンドファイルを非同期で実行する方法

  22. 22

    非同期またはマルチスレッドコードでのコールバックの実行をテストする

  23. 23

    cronieによって実行されると、Bashコマンドは非同期で実行されます

  24. 24

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

  25. 25

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

  26. 26

    さまざまなコマンドを実行するためのインジケーターを作成するにはどうすればよいですか?

  27. 27

    Pythonマルチプロセッシングでは、プロセスプールに非同期で渡されるさまざまな関数にさまざまなタイムアウトをどのように指定できますか?

  28. 28

    このコードは非同期で実行されていますか?

  29. 29

    コマンドラインとWindowsエクスプローラーでのWMICのさまざまな動作

ホットタグ

アーカイブ