炫意html5
最早CSS3和HTML5移动技术网站之一

Task的Await在winfrom和控制台程序下为什么有不同的表现

在控制台程序里面如下代码:

static  void Main(string[] args)
{
var fileName = Environment.CurrentDirectory + @"\test.txt";
var content = GetFileContent(fileName);
Console.WriteLine("文件内容:" + content.Result);
Console.ReadKey();
}
public static async Task<string> GetFileContent(string fileName)
{
using (FileStream SourceStream = File.Open(fileName, FileMode.Open))
{
var result = new byte[SourceStream.Length];
await SourceStream.ReadAsync(result, 0, (int)SourceStream.Length);
return System.Text.Encoding.ASCII.GetString(result);
}
}

在控制台上能正常运行,得到想要的结果,同样在winfrom代码如下:

private void button1_Click(object sender, EventArgs e)
{
var fileName = Environment.CurrentDirectory + @"\test.txt";
var content = GetFileContent(fileName);
rtxtInfo.Text = content.Result;
}
public  async Task<string> GetFileContent(string fileName)
{
using (FileStream SourceStream = File.Open(fileName, FileMode.Open))
{
var result = new byte[SourceStream.Length];
await SourceStream.ReadAsync(result, 0, (int)SourceStream.Length);
return System.Text.Encoding.ASCII.GetString(result);
}
}

方法一模一样,在winfrom里面这样写,得不到结果,处于一直在等待执行状态,导致界面假死,同样的操作在控制台缺可以.
在winfrom里面需要改成异步加await 才可以获取结果。想知道为什么会出现这样的问题?

回答

死锁了,给每个await的函数后面加上.ConfigureAwait(false) 就能解决问题
asp.net也会有个问题

炫意HTML5 » Task的Await在winfrom和控制台程序下为什么有不同的表现

Java基础教程Android基础教程