Rumah > Artikel > pembangunan bahagian belakang > Cara menggunakan berbilang benang untuk mengakses sumber rangkaian dalam C# secara serentak
Cara menggunakan multi-threading untuk mengakses sumber rangkaian secara serentak dalam C#, contoh kod khusus diperlukan
Dalam aplikasi rangkaian moden, concurrency adalah penting untuk banyak tugas. Teknologi pengaturcaraan berbilang benang dan tak segerak boleh meningkatkan kecekapan permintaan rangkaian dan pemprosesan data, dan menjadikan pengalaman pengguna lebih lancar. Dalam C#, kita boleh menggunakan multi-threading untuk mencapai akses serentak kepada sumber rangkaian. Artikel ini akan menunjukkan kepada anda cara menggunakan berbilang benang untuk mengakses sumber rangkaian secara serentak dalam C# dan memberikan contoh kod khusus.
Sebelum menggunakan berbilang benang untuk mengakses sumber rangkaian secara serentak, kita perlu terlebih dahulu menyediakan sumber rangkaian yang boleh diuji. Katakan kami mempunyai API mudah yang mengembalikan nama pengguna dan maklumat umur. Berikut ialah contoh API simulasi:
public class UserAPI { private Dictionary<string, int> users; public UserAPI() { users = new Dictionary<string, int> { {"Alice", 25}, {"Bob", 30}, {"Charlie", 35} }; } public string GetUser(string name) { if (users.ContainsKey(name)) { Thread.Sleep(2000); // 模拟耗时操作 return $"姓名:{name},年龄:{users[name]}"; } else { return $"找不到用户:{name}"; } } }
Dalam contoh di atas, UserAPI mensimulasikan API yang mengembalikan maklumat pengguna. Untuk mensimulasikan permintaan rangkaian sebenar, kami menambahkan Thread.Sleep(2000)
pada kaedah GetUser
untuk mensimulasikan operasi yang memakan masa. GetUser
方法中添加了一个Thread.Sleep(2000)
来模拟耗时操作。
接下来,我们将使用多线程并发访问UserAPI并获取用户信息。我们将使用Task
类和Parallel.ForEach
方法来实现多线程并发请求。
下面是一个使用Task
类的示例代码:
static void Main() { UserAPI api = new UserAPI(); List<Task<string>> tasks = new List<Task<string>>(); List<string> names = new List<string> { "Alice", "Bob", "Charlie" }; foreach (string name in names) { tasks.Add(Task.Factory.StartNew(() => api.GetUser(name))); } Task.WaitAll(tasks.ToArray()); foreach (var task in tasks) { Console.WriteLine(task.Result); } }
在上面的示例中,我们首先创建了一个UserAPI
的实例。然后,我们创建了一个List<task>></task>
来存储每个用户信息请求的任务。接下来,我们遍历names
列表,并为每个用户创建一个Task
,使用Task.Factory.StartNew
方法启动任务。在遍历完成后,我们使用Task.WaitAll
方法等待所有任务完成。最后,我们遍历每个任务并打印用户信息。
除了使用Task
类,我们还可以使用Parallel.ForEach
方法来实现多线程并发访问网络资源。下面是一个使用Parallel.ForEach
方法的示例代码:
static void Main() { UserAPI api = new UserAPI(); List<string> names = new List<string> { "Alice", "Bob", "Charlie" }; Parallel.ForEach(names, (name) => { string result = api.GetUser(name); Console.WriteLine(result); }); }
在上面的示例中,我们首先创建了一个UserAPI
的实例,并定义了一个names
列表。然后,我们使用Parallel.ForEach
方法遍历names
列表,并为每个用户调用api.GetUser
方法。在并发执行时,Parallel.ForEach
方法会自动管理线程的分配和调度。最后,我们在每个迭代中打印用户信息。
通过使用Task
类和Parallel.ForEach
方法,我们可以在C#中实现多线程并发访问网络资源。无论是使用Task
类还是Parallel.ForEach
Task
dan kaedah Parallel.ForEach
untuk melaksanakan permintaan serentak berbilang benang. 🎜🎜Berikut ialah contoh kod menggunakan kelas Task
: 🎜rrreee🎜Dalam contoh di atas, kami mula-mula mencipta contoh UserAPI
. Kemudian, kami mencipta List<task>></task>
untuk menyimpan tugasan bagi setiap permintaan maklumat pengguna. Seterusnya, kami mengulangi senarai nama
dan mencipta Task
untuk setiap pengguna, menggunakan kaedah Task.Factory.StartNew
untuk memulakan tugas. Selepas traversal selesai, kami menggunakan kaedah Task.WaitAll
untuk menunggu semua tugasan selesai. Akhir sekali, kami mengulangi setiap tugas dan mencetak maklumat pengguna. 🎜🎜Selain menggunakan kelas Task
, kami juga boleh menggunakan kaedah Parallel.ForEach
untuk mencapai akses serentak berbilang benang kepada sumber rangkaian. Berikut ialah contoh kod menggunakan kaedah Parallel.ForEach
: 🎜rrreee🎜Dalam contoh di atas, kami mula-mula mencipta contoh UserAPI
dan mentakrifkan Parallel.ForEach
untuk mengulang melalui senarai nama
dan memanggil kaedah api.GetUser
untuk setiap pengguna. Semasa pelaksanaan serentak, kaedah Parallel.ForEach
mengurus peruntukan dan penjadualan urutan secara automatik. Akhir sekali, kami mencetak maklumat pengguna dalam setiap lelaran. 🎜🎜Dengan menggunakan kelas Task
dan kaedah Parallel.ForEach
, kami boleh melaksanakan akses serentak berbilang benang kepada sumber rangkaian dalam C#. Sama ada anda menggunakan kelas Task
atau kaedah Parallel.ForEach
, anda boleh meningkatkan kecekapan permintaan rangkaian dan pemprosesan data. Berdasarkan senario dan keperluan aplikasi tertentu, anda boleh memilih kaedah yang sesuai untuk mencapai akses serentak berbilang benang kepada sumber rangkaian. Di atas ialah contoh kod menggunakan C# untuk melaksanakan akses serentak berbilang benang kepada sumber rangkaian. 🎜Atas ialah kandungan terperinci Cara menggunakan berbilang benang untuk mengakses sumber rangkaian dalam C# secara serentak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!