非同期プログラミングの基礎となるロジックの分析 (非同期プログラミングを実現するために C# 5.0 より前に使用されていたイベント委任メソッド)

デリゲートを使用した非同期プログラミング:

public delegate void MyDelegate(string message);

public class MyClass
{
    public void DoSomeWorkAsync(MyDelegate callback)
    {
        // Long-running operation that performs some work asynchronously.
        // When the operation is complete, invoke the callback passing the completed message.
        callback("Some work is done!");
    }
}

// To use, create an instance of the MyClass and call the DoSomeWorkAsync method.
MyClass myObject = new MyClass();
myObject.DoSomeWorkAsync(result => Console.WriteLine(result));

非同期プログラミングを行う場合、通常、ファイルの読み取り、ネットワーク要求の処理など、時間のかかる操作を処理する必要があります。これらの操作により現在のスレッドがブロックされ、アプリケーションが一時停止されたアニメーション状態になる可能性があります。この問題を解決するには、デリゲートを使用して非同期プログラミングを実装します。

デリゲートを使用して非同期プログラミングを実装する場合、最初にデリゲートの型を定義する必要があります。たとえば、デリゲートの型にはmessage 型delegate void MyDelegate(string message)のパラメーターがあります。string次に、クラスを作成し、そのクラス内で特定の非同期タスクを実行するメソッドを定義します。次に例を示します。

public class MyClass
{
    public void DoSomeWorkAsync(MyDelegate callback)
    {
        // 执行一些耗时的操作(比如读取文件、处理网络请求等)
        // 注意:这里不能使用阻塞式的方法,否则将会导致应用程序假死

        // 当异步任务完成后,调用回调方法,通知调用者操作已经完成
        callback("Some work is done!");
    }
}

上記のコードでは、DoSomeWorkAsyncという名前のメソッドを定義します。そのパラメータは、以前に定義したデリゲート型ですMyDelegateこのメソッドではDoSomeWorkAsync、時間のかかる操作を実行し、操作の完了後に受信デリゲート オブジェクトを使用してコールバック メソッドを呼び出し、非同期タスクが完了したことを呼び出し元に通知できます。

デリゲートを使用して非同期プログラミングを実装する場合、デリゲート オブジェクトを作成し、それをパラメーターとして非同期メソッドに渡すことで、非同期タスクを開始できます。例えば:

MyClass myObject = new MyClass();
myObject.DoSomeWorkAsync(result => Console.WriteLine(result));

上記のコードでは、まずMyClassclass のインスタンスを作成しmyObject、次に class の非同期メソッドを呼び出しDoSomeWorkAsync、匿名メソッドをパラメータとしてメソッドに渡します。匿名メソッドのコードは、非同期タスクの完了後に実行され、タスク完了のメッセージが出力されます。

委任を使用して非同期プログラミングを実装するこの方法は、非同期コールバック モデルとも呼ばれます。その中心的なアイデアは、コールバック関数を通じて非同期タスク完了イベントを処理し、メイン スレッドがブロックされることなく他の操作を実行し続けることができるようにすることです。非同期プログラミングはデリゲートを使用して実現できますが、需要が増大し続けるにつれてデリゲート モデルは複雑になり、保守が困難になるため、C# 5.0 以降のバージョンで導入された非同期操作 API は徐々にシンプル、効率的、簡単になってきました。 -非同期プログラミングを使用します。

現在のプログラミング言語は、最下位レイヤーから徐々に脱却しつつあり、コーディングを改善するためのものですが、最下位レイヤーのロジックも非常に重要です。

おすすめ

転載: blog.csdn.net/conquer_galaxy/article/details/130274844