Rumah > pembangunan bahagian belakang > Tutorial C#.Net > Cara menangani baris gilir mesej dan isu komunikasi tak segerak dalam pembangunan C#

Cara menangani baris gilir mesej dan isu komunikasi tak segerak dalam pembangunan C#

王林
Lepaskan: 2023-10-08 08:41:26
asal
843 orang telah melayarinya

Cara menangani baris gilir mesej dan isu komunikasi tak segerak dalam pembangunan C#

Cara menangani baris gilir mesej dan isu komunikasi tak segerak dalam pembangunan C#

Pengenalan:
Dalam pembangunan perisian moden, dengan aplikasi Apabila program berkembang dalam saiz dan kerumitan, ia menjadi penting untuk mengendalikan baris gilir mesej dengan cekap dan melaksanakan komunikasi tak segerak. Beberapa senario aplikasi biasa termasuk penghantaran mesej antara sistem yang diedarkan, pemprosesan baris gilir tugas latar belakang, pengaturcaraan dipacu peristiwa, dsb.

Artikel ini akan membincangkan cara menangani baris gilir mesej dan isu komunikasi tak segerak dalam pembangunan C#, dan menyediakan contoh kod khusus.

1. Baris Gilir Mesej
Baris gilir mesej ialah mekanisme komunikasi tak segerak yang membenarkan mesej Dengan menghantar mesej ke baris gilir, penerima boleh mendapatkan dan memproses mesej secara tidak segerak. Kelebihannya termasuk penyahgandingan, meningkatkan kebolehskalaan sistem dan toleransi kesalahan, dsb.

Dalam pembangunan C#, anda boleh menggunakan Bas Perkhidmatan Azure, RabbitMQ dan perkhidmatan baris gilir mesej lain untuk melaksanakan fungsi baris gilir mesej. Berikut ialah contoh kod menggunakan RabbitMQ:

  1. Terima mesej

    using RabbitMQ.Client;
    using RabbitMQ.Client.Events;
    using System;
    using System.Text;
    
    class Receive
    {
     static void Main()
     {
         var factory = new ConnectionFactory() { HostName = "localhost" };
         using (var connection = factory.CreateConnection())
         using (var channel = connection.CreateModel())
         {
             channel.QueueDeclare(queue: "hello",
                                  durable: false,
                                  exclusive: false,
                                  autoDelete: false,
                                  arguments: null);
    
             var consumer = new EventingBasicConsumer(channel);
             consumer.Received += (model, ea) =>
             {
                 var body = ea.Body.ToArray();
                 var message = Encoding.UTF8.GetString(body);
                 Console.WriteLine(" [x] Received {0}", message);
             };
             channel.BasicConsume(queue: "hello",
                                  autoAck: true,
                                  consumer: consumer);
    
             Console.WriteLine(" Press [enter] to exit.");
             Console.ReadLine();
         }
     }
    }
    Salin selepas log masuk
  2. Hantar mesej semula #🎜#rree🎜

Dalam kod di atas, penerima mendaftarkan pengendali acara melalui kaedah channel.BasicConsume untuk memproses mesej yang diterima daripada baris gilir. Pengirim menggunakan kaedah channel.BasicPublish untuk menghantar mesej ke baris gilir.

channel.BasicConsume方法注册一个事件处理程序处理从队列中接收到的消息。发送者使用channel.BasicPublish方法将消息发送到队列中。

二、异步通信
异步通信是一种并发处理方式,可以提高应用程序的性能和响应能力。在C#开发中,可以使用异步方法和任务来实现异步通信。

  1. 异步方法
    异步方法通过asyncawait关键字实现,在处理耗时操作时可以让线程回到调用者的线程上继续执行其他任务,而不会阻塞调用者的线程。

以下是使用异步方法处理耗时操作的示例代码:

using RabbitMQ.Client;
using System;
using System.Text;

class Send
{
 static void Main()
 {
     var factory = new ConnectionFactory() { HostName = "localhost" };
     using (var connection = factory.CreateConnection())
     using (var channel = connection.CreateModel())
     {
         channel.QueueDeclare(queue: "hello",
                              durable: false,
                              exclusive: false,
                              autoDelete: false,
                              arguments: null);

         string message = "Hello World!";
         var body = Encoding.UTF8.GetBytes(message);

         channel.BasicPublish(exchange: "",
                              routingKey: "hello",
                              basicProperties: null,
                              body: body);
         Console.WriteLine(" [x] Sent {0}", message);
     }

     Console.WriteLine(" Press [enter] to exit.");
     Console.ReadLine();
 }
}
Salin selepas log masuk

以上代码中,DoSomethingAsync方法使用了await Task.Delay(2000)来模拟一个耗时操作。Main方法使用await关键字来等待DoSomethingAsync方法的完成。

  1. 任务
    任务(Task)是.NET中的一种抽象,代表一个异步操作。可以使用Task.Run方法或Task.Factory.StartNew方法创建一个任务,并使用await来等待任务的完成。

以下是使用任务处理耗时操作的示例代码:

using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        await DoSomethingAsync();
        Console.WriteLine("Continue working...");
        Console.ReadLine();
    }

    static async Task DoSomethingAsync()
    {
        Console.WriteLine("Start working...");
        await Task.Delay(2000);
        Console.WriteLine("Finish working...");
    }
}
Salin selepas log masuk

以上代码中,通过Task.Run方法将耗时操作放在一个新的任务中,使用Wait 2. Komunikasi tak segerak

Komunikasi tak segerak ialah kaedah pemprosesan serentak yang boleh meningkatkan prestasi dan responsif aplikasi. Dalam pembangunan C#, komunikasi tak segerak boleh dicapai menggunakan kaedah dan tugas tak segerak.


Kaedah tak segerak

Kaedah tak segerak dilaksanakan melalui kata kunci async dan menunggu, yang boleh digunakan semasa memproses operasi yang memakan masa Benang kembali ke urutan pemanggil untuk terus melaksanakan tugas lain tanpa menyekat urutan pemanggil.

  1. Berikut ialah kod sampel yang menggunakan kaedah tak segerak untuk mengendalikan operasi yang memakan masa:
  2. using System;
    using System.Threading.Tasks;
    
    class Program
    {
        static void Main()
        {
            Task.Run(() =>
            {
                Console.WriteLine("Start working...");
                Task.Delay(2000).Wait();
                Console.WriteLine("Finish working...");
            }).Wait();
    
            Console.WriteLine("Continue working...");
            Console.ReadLine();
        }
    }
    Salin selepas log masuk
Dalam kod di atas, DoSomethingAsync kod> kaedah menggunakan menunggu Task.Delay(2000) untuk mensimulasikan operasi yang memakan masa. Kaedah Utama menggunakan kata kunci menunggu untuk menunggu penyelesaian kaedah DoSomethingAsync. #🎜🎜#
    #🎜🎜#Task#🎜🎜#Task ialah abstraksi dalam .NET yang mewakili operasi tak segerak. Anda boleh menggunakan kaedah Task.Run atau kaedah Task.Factory.StartNew untuk membuat tugasan dan gunakan menunggu untuk menunggu tugasan untuk melengkapkan. #🎜🎜##🎜🎜##🎜🎜#Berikut ialah contoh kod yang menggunakan tugasan untuk mengendalikan operasi yang memakan masa: #🎜🎜#rrreee#🎜🎜#Dalam kod di atas, Task.Run akan Meletakkan operasi yang memakan masa dalam tugasan baharu dan menggunakan kaedah Tunggu untuk menunggu tugasan selesai. #🎜🎜##🎜🎜#Kesimpulan: #🎜🎜# Melalui penggunaan baris gilir mesej dan komunikasi tak segerak yang betul, prestasi, kebolehskalaan dan responsif aplikasi boleh dipertingkatkan. Dalam pembangunan C#, anda boleh menggunakan perkhidmatan baris gilir mesej seperti RabbitMQ atau Azure Service Bus untuk melaksanakan fungsi baris gilir mesej dan menggunakan kaedah dan tugas tak segerak untuk melaksanakan komunikasi tak segerak. Saya harap artikel ini telah memberikan sedikit bantuan untuk anda dalam menangani baris gilir mesej dan isu komunikasi tak segerak dalam pembangunan C#. #🎜🎜##🎜🎜# Rujukan: #🎜🎜##🎜🎜##🎜🎜#https://www.rabbitmq.com/getstarted.html#🎜🎜##🎜🎜#

Atas ialah kandungan terperinci Cara menangani baris gilir mesej dan isu komunikasi tak segerak dalam pembangunan C#. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan