Ich schaue auf die neuen async
und await
Schlüsselwörter in C# und versuche nur, ein Gefühl für sie zu bekommen.FileStream WriteAsync und warten auf Verwirrung
Ich bin auf der MSDN FileStream.WriteAsync()
example, und ich war mir nicht sicher, ob ich etwas verstanden habe.
Das Beispiel ist wie folgt:
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);
}
}
}
}
Was ich nicht bekommen, die Platzierung der await
ist. Es scheint, dass Sie das Element Task
, das von WriteAsync()
zurückgegeben wird, nicht nehmen kann, da dies immer zu einem Syntaxfehler führt. Der einzige Weg, wie ich das kompilieren könnte, ist, den await
mit dem Anruf zu verlassen.
Aber wenn Sie dies tun, wartet es nicht auf den Anruf zu beenden? Dies macht es nicht sehr asynchron ...
Was meinst du mit "nimm" den "Task" Gegenstand? –
@Jon Etwas wie 'Task t = SourceStream.WriteAsync (Ergebnis, 0, result.Length);' und später '' erwarten t; ' – Andrew
Sie können das auf jeden Fall tun - was lässt Sie denken, Sie können nicht? –