2014-08-27 13 views
5

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);   
} 
+1

'StreamWriter.WriteAsync' hoặc' FileStream.WriteAsync' –

+0

http://msdn.microsoft.com/en-us/library/jj155757.aspx – IVAAAN123

Trả lời

9

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); 
    } 
} 
+0

Những người gọi sau đó cũng phải trở thành async phải không? – Prabhu

+0

@Prabhu Có, anh ta phải chờ đợi WriteAsync' –

+0

Ở đâu nó ghi dữ liệu (mà là một chuỗi) ở đây? – Prabhu

2

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.

+4

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ộ –

+0

Điều này là kém hơn so với câu trả lời của Yuval. –

Các vấn đề liên quan