Làm cách nào để sửa đổi phương thức này để gọi nó không đồng bộ?Tạo một tệp không đồng bộ
private void Write(string fileName, data)
{
File.WriteAllText(fileName, data);
}
Làm cách nào để sửa đổi phương thức này để gọi nó không đồng bộ?Tạo một tệp không đồng bộ
private void Write(string fileName, data)
{
File.WriteAllText(fileName, data);
}
Nhìn vào FileStream.WriteAsync
(Lưu ý: Bạn phải sử dụng quá tải thích hợp mà phải mất một bool
cho thấy nếu nó nên chạy async :)
public async Task WriteAsync(string data)
{
var buffer = Encoding.ASCII.GetBytes(data);
using (var fs = new FileStream(@"File", FileMode.OpenOrCreate,
FileAccess.Write, FileShare.None, buffer.Length, true))
{
await fs.WriteAsync(buffer, 0, buffer.Length);
}
}
Sửa
Nếu bạn muốn sử dụng string data
của bạn và tránh việc chuyển đổi thành một số byte[]
, bạn có thể sử dụng quá tải nhiều hơn và ít chi tiết hơn StreamWriter.WriteAsync
quá tải chấp nhận một chuỗi:
public async Task WriteAsync(string data)
{
using (var sw = new StreamWriter(@"FileLocation"))
{
await sw.WriteAsync(data);
}
}
Bạn có thể gọi phương thức bên trong một Task
như vậy:
Task.Factory.StartNew(() => File.WriteAllText("test.txt","text"));
Có rất nhiều cách để bắt đầu một nhiệm vụ và điều này chỉ là một trong số họ, cho bạn một đọc thêm here.
Bạn không cần sử dụng chuỗi threadpool để tạo yêu cầu bị ràng buộc IO. Điều này không làm cho cuộc gọi thực sự không đồng bộ –
Điều này là kém hơn so với câu trả lời của Yuval. –
'StreamWriter.WriteAsync' hoặc' FileStream.WriteAsync' –
http://msdn.microsoft.com/en-us/library/jj155757.aspx – IVAAAN123