Tôi đang tìm kiếm các từ khóa mới async
và await
trong C# và chỉ cố gắng để có được cảm nhận về chúng.FileStream WriteAsync và chờ đợi sự nhầm lẫn
Tôi đang xem MSDN FileStream.WriteAsync()
example và tôi không chắc mình đã hiểu điều gì đó.
Ví dụ như sau:
using System;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.IO;
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private async void Button_Click(object sender, RoutedEventArgs e)
{
UnicodeEncoding uniencoding = new UnicodeEncoding();
string filename = @"c:\Users\exampleuser\Documents\userinputlog.txt";
byte[] result = uniencoding.GetBytes(UserInput.Text);
using (FileStream SourceStream = File.Open(filename, FileMode.OpenOrCreate))
{
SourceStream.Seek(0, SeekOrigin.End);
await SourceStream.WriteAsync(result, 0, result.Length);
}
}
}
}
Những gì tôi không nhận được là vị trí của await
. Có vẻ như bạn không thể lấy mục Task
được trả về bởi WriteAsync()
vì điều này luôn mang lại cho tôi một lỗi cú pháp. Vì vậy, cách duy nhất tôi có thể nhận được điều này để biên dịch là bằng cách rời khỏi await
với cuộc gọi.
Nhưng nếu bạn làm điều này, không phải chờ cuộc gọi kết thúc? Điều này làm cho nó không phải là rất không đồng bộ ...
Bạn có ý nghĩa gì khi "lấy" mục 'Tác vụ'? –
@Jon Một cái gì đó như 'Task t = SourceStream.WriteAsync (kết quả, 0, result.Length);' và sau đó làm 'await t;' – Andrew
Bạn chắc chắn có thể làm điều đó - điều gì khiến bạn nghĩ rằng bạn không thể? –