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:
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(); } } }
Hantar mesej semula #🎜#rree🎜
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#开发中,可以使用异步方法和任务来实现异步通信。
async
和await
关键字实现,在处理耗时操作时可以让线程回到调用者的线程上继续执行其他任务,而不会阻塞调用者的线程。以下是使用异步方法处理耗时操作的示例代码:
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(); } }
以上代码中,DoSomethingAsync
方法使用了await Task.Delay(2000)
来模拟一个耗时操作。Main
方法使用await
关键字来等待DoSomethingAsync
方法的完成。
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..."); } }
以上代码中,通过Task.Run
方法将耗时操作放在一个新的任务中,使用Wait
2. Komunikasi 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.
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(); } }
Utama
menggunakan kata kunci menunggu
untuk menunggu penyelesaian kaedah DoSomethingAsync
. #🎜🎜#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, 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!