2014-08-27 75 views
5

如何修改此方法以異步調用它?異步創建文件

private void Write(string fileName, data) 
{ 
    File.WriteAllText(fileName, data);   
} 
+1

'StreamWriter.WriteAsync'或'FileStream.WriteAsync' – 2014-08-27 07:35:13

+0

http://msdn.microsoft.com/en-us/library/jj155757.aspx – IVAAAN123 2014-08-27 07:35:14

回答

9

查找到FileStream.WriteAsync(請注意,您必須使用適當的過載,這需要bool指示是否應該異步:)

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

如果你想使用運行編輯

string data和避免轉換到byte[],您可以使用更多抽象和更不詳細的StreamWriter.WriteAsync超載,它接受一個字符串:

public async Task WriteAsync(string data) 
{ 
    using (var sw = new StreamWriter(@"FileLocation")) 
    { 
     await sw.WriteAsync(data); 
    } 
} 
+0

那麼來電者也必須變成異步權利? – Prabhu 2014-08-27 07:49:50

+0

@Prabhu是的,他必須'等待WriteAsync' – 2014-08-27 07:50:41

+0

它在哪裏寫數據(這是一個字符串)在這裏? – Prabhu 2014-08-27 08:41:05

2

可以調用方法Task裏面,像這樣:

Task.Factory.StartNew(() => File.WriteAllText("test.txt","text")); 

有許多方法來啓動一個任務,這只是其中的一個,你的閱讀更多here

+4

您不需要使用線程池線程來發出IO綁定請求。這不會使呼叫真正異步 – 2014-08-27 07:50:10

+0

這不如Yuval的答案。 – 2014-08-27 08:35:28