poy*_*poy 6 .net c# filestream async-await
我正在研究C#中的新关键字async和await关键字,并试图感受它们.
我正在看MSDN FileStream.WriteAsync() 示例,我不确定我理解了什么.
示例如下:
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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我没有得到的是放置await.您似乎无法获取Task返回的项目,WriteAsync()因为这总是给我一个语法错误.因此,我可以将其编译的唯一方法是通过await调用.
但如果你这样做,是不是等待电话完成?这使它不是非常异步......
Jon*_*eet 14
我怀疑问题在于你对什么有所了解await.
但如果你这样做,是不是等待电话完成?这使它不是非常异步......
当你await做某事时,你"异步阻塞" - 当异步操作完成时你的异步函数将继续,但立即调用将立即完成.
因此,在您的情况下,UI线程因为Button_Click返回而变为解除阻塞,但是当文件写入操作完成时,执行将返回(仍然在UI线程中)到await表达式的结尾...然后您将关闭FileStream并完成异步功能.
如果你在表达式之后做了其他事情await(例如更新UI),那将会更清楚.但是,它确实是异步的 - 它只允许您编写看起来同步的代码.
| 归档时间: |
|
| 查看次数: |
10120 次 |
| 最近记录: |