יישום קלט ופלט אסינכרוניים של קובץ
פעולות קלט קובץ ופלט הן חיוניות עבור יישומים רבים, ומאפשרות להם לקרוא ולכתוב לקבצים בכונן הקשיח. ב- C#, ניתן לבצע קלט ופלט של קובץ (קלט/פלט של קובץ) באופן סינכרוני או אסינכרוני. I/O של קובץ אסינכרוני שימושי במיוחד לשיפור הביצועים והתגובתיות של היישום, במיוחד בתרחישים שבהם פעולות קבצים עשויות להימשך זמן רב, כגון קריאת קבצים גדולים או כתיבת נתונים בכונן הקשיח.
יצירת שיטות אסינכרונית לקריאה ולכתיבה של קבצים
מילות async המפתח await ב- C# מאפשרות לך ליצור פעולות שירות אסינכרוניות הניתנות לביצוע פעולות קלט/O של קובץ מבלי לחסום את הליך המשנה הראשי. פעולה זו שימושית במיוחד ביישומים עם ממשק משתמש, כאשר חסימת הליך המשנה הראשי עשויה להוביל לממשק משתמש קפוא או שאינו מגיב. מרחבי System.IOSystem.Text.Json השמות ו- מספקים מחלקות ושיטות לביצוע פעולות קלט/O של קובץ באופן אסינכרוני.
לדוגמה, File הכיתה מרחב System.IO השמות מספקת שיטות לקריאה ולכתיבה של קבצים באופן אסינכרוני. פעולת File.ReadAllTextAsync השירות מקריאת את התוכן של קובץ באופן אסינכרוני, File.WriteAllTextAsync בעוד שהשיטה כותב טקסט לקובץ באופן אסינכרוני. שיטות אלה מחזירות או Task<string> המייצגות Task את הפעולה הסינכרונית, await ומאפשרות לך להשתמש במילת המפתח כדי להמתין להשלמתן מבלי לחסום את הליך המשנה של השיחות.
מרחב השמות System.Text.Json , המחלקה מספקת JsonSerializer שיטות אסינכרוניות לעריכה בסידרה ולעריכה בסידרה של נתוני JSON. פעולת JsonSerializer.SerializeAsync השירות סידרה אובייקט למחרוזת JSON באופן אסינכרוני, JsonSerializer.DeserializeAsync בעוד בפעולת השירות ביטול עריכה בסידרה של מחרוזת JSON לאובייקט באופן אסינכרוני. פעולות שירות אלה מחזירות גם Task פעולת שירות המייצגת את הפעולה הסינכרונית.
דוגמת הקוד הבאה מדגימה כיצד ליצור פעולות שירות אסינכרוניות שסידרה של אובייקט C#, לכתוב את מחרוזת JSON לקובץ, לקרוא את תוכן הקובץ במחרוזת ולבצע עריכה בסידרה של מחרוזת JSON בחזרה לאובייקט C#:
using System;
using System.IO;
using System.Text.Json;
using System.Threading.Tasks;
public class Account
{
public string Name { get; set; }
public decimal Balance { get; set; }
}
public class Program
{
public static async Task Main()
{
// Combine a directory and file name, then create the directory if it doesn't exist
string directoryPath = @"C:\TempDir";
if (!Directory.Exists(directoryPath))
{
Directory.CreateDirectory(directoryPath);
}
string fileName = "account.json";
string filePath = Path.Combine(directoryPath, fileName);
Account account = new Account { Name = "Elize Harmsen", Balance = 1000.00m };
// Save account data to a file asynchronously
await SaveAccountDataAsync(filePath, account);
// Load account data from the file asynchronously
Account loadedAccount = await LoadAccountDataAsync(filePath);
Console.WriteLine($"Name: {loadedAccount.Name}, Balance: {loadedAccount.Balance}");
}
public static async Task SaveAccountDataAsync(string filePath, Account account)
{
string jsonString = JsonSerializer.Serialize(account);
await File.WriteAllTextAsync(filePath, jsonString);
}
public static async Task<Account> LoadAccountDataAsync(string filePath)
{
string jsonString = await File.ReadAllTextAsync(filePath);
return JsonSerializer.Deserialize<Account>(jsonString);
}
}
בדוגמה זו, SaveAccountDataAsync פעולת השירות Account סידרה אובייקט במחרוזת JSON וכתיבה שלו בקובץ באופן אסינכרוני. פעולת LoadAccountDataAsync השירות מקריאת את מחרוזת JSON מהקובץ ומסירה אותה בסידרה Account בחזרה לאובייקט באופן אסינכרוני. השיטה Main מדגימה כיצד לקרוא לשיטות אסינכרוניות אלה באמצעות מילת await המפתח.
פעולה זו מאפשרת ליישום לבצע פעולות של I/O של קובץ מבלי לחסום את הליך המשנה הראשי, ולשפר את הביצועים ואת יכולת התגובה. פעולת Directory.CreateDirectory השירות משמשת ליצירת הספריה אם היא אינה קיימת, ובכך מוודאת שניתן לכתוב את הקובץ בהצלחה.
תקציר
ביחידה זו, למדת כיצד ליישם פעולות קלט ופלט אסינכרוניות של קובץ ב- C#. חקרת את השימוש במילות המפתח async וב await - כדי ליצור שיטות אסינכרוניות לקריאה ולכתיבה של קבצים. על-ידי שימוש בטכניקות אלה, באפשרותך לשפר את הביצועים ואת התגובתיות של היישומים שלך בעת ביצוע פעולות של I/O של קובץ.
נקודות עיקריות
- ניתן לבצע פעולות קלט ופלט של קובץ באופן סינכרוני או אסינכרוני ב- C#.
- I/O של קובץ אסינכרוני משפר את ביצועי היישום ואת יכולת התגובה.
- מילות
asyncהמפתחawaitבמילות המפתח משמשות ליצירת פעולות שירות אסינכרוניות עבור פעולות קלט/O של קובץ. - מרחבי
System.IOSystem.Text.Jsonהשמות ו- מספקים מחלקות ושיטות לביצוע פעולות קלט/O של קובץ באופן אסינכרוני. - המחלקה
FileוהכיתהJsonSerializerמשמשים בדוגמה שסופקה כדי להדגים פעולות של I/O של קובץ אסינכרוני.