Cara menggunakan berbilang benang untuk mengakses sumber rangkaian dalam C# secara serentak

WBOY
Lepaskan: 2023-10-10 15:36:18
asal
1430 orang telah melayarinya

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}";
        }
    }
}
Salin selepas log masuk

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);
    }
}
Salin selepas log masuk

在上面的示例中,我们首先创建了一个UserAPI的实例。然后,我们创建了一个List<Task<string>>来存储每个用户信息请求的任务。接下来,我们遍历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);
    });
}
Salin selepas log masuk

在上面的示例中,我们首先创建了一个UserAPI的实例,并定义了一个names列表。然后,我们使用Parallel.ForEach方法遍历names列表,并为每个用户调用api.GetUser方法。在并发执行时,Parallel.ForEach方法会自动管理线程的分配和调度。最后,我们在每个迭代中打印用户信息。

通过使用Task类和Parallel.ForEach方法,我们可以在C#中实现多线程并发访问网络资源。无论是使用Task类还是Parallel.ForEach

Seterusnya, kami akan menggunakan multi-threading untuk mengakses UserAPI dan mendapatkan maklumat pengguna secara serentak. Kami akan menggunakan kelas 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 nama senarai. Kami kemudian menggunakan kaedah 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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!