溫馨提示×

c# blockingcollection如何實現數據持久化

c#
小樊
105
2024-11-21 05:50:11
欄目: 編程語言

在C#中,BlockingCollection 本身不提供數據持久化的功能。但是,你可以通過將 BlockingCollection 中的數據序列化為持久化存儲(如文件、數據庫或云存儲)來實現數據的持久化。以下是一個簡單的示例,展示了如何使用 BlockingCollection 結合文件持久化來保存和加載數據。

首先,定義一個簡單的類,例如 Item

public class Item
{
    public int Id { get; set; }
    public string Name { get; set; }
}

接下來,創建一個 BlockingCollection<Item> 實例,并實現數據的保存和加載方法:

using System;
using System.Collections.Concurrent;
using System.IO;
using System.Threading.Tasks;

class Program
{
    static BlockingCollection<Item> _items = new BlockingCollection<Item>();

    static async Task Main(string[] args)
    {
        // 添加一些示例數據
        _items.Add(new Item { Id = 1, Name = "Item 1" });
        _items.Add(new Item { Id = 2, Name = "Item 2" });

        // 保存數據到文件
        await SaveItemsToFileAsync("items.txt");

        // 從文件加載數據
        await LoadItemsFromFileAsync("items.txt");

        // 輸出加載的數據
        foreach (var item in _items)
        {
            Console.WriteLine($"Id: {item.Id}, Name: {item.Name}");
        }
    }

    static async Task SaveItemsToFileAsync(string fileName)
    {
        using (var writer = new StreamWriter(fileName))
        {
            foreach (var item in _items)
            {
                await writer.WriteLineAsync($"{item.Id},{item.Name}");
            }
        }
    }

    static async Task LoadItemsFromFileAsync(string fileName)
    {
        if (!File.Exists(fileName))
        {
            return;
        }

        using (var reader = new StreamReader(fileName))
        {
            string line;
            while ((line = await reader.ReadLineAsync()) != null)
            {
                var parts = line.Split(',');
                int id = int.Parse(parts[0]);
                string name = parts[1];
                _items.Add(new Item { Id = id, Name = name });
            }
        }
    }
}

在這個示例中,我們定義了 SaveItemsToFileAsyncLoadItemsFromFileAsync 方法,分別用于將 BlockingCollection<Item> 中的數據保存到文件和從文件加載數據。這樣,即使程序關閉或崩潰,數據也會被持久化存儲。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女