关于异步/任务的初学者
本文关键字:任务 初学者 异步 于异步 | 更新日期: 2023-09-27 18:31:07
看看这段代码:
private async void Lista()
{
var _folder = Windows.Storage.ApplicationData.Current.LocalFolder;
var file = await _folder.GetFileAsync("thefile.txt");
var read = await Windows.Storage.FileIO.ReadTextAsync(file);
}
由于代码块await
我需要在签名中使用async
。这意味着我不能简单地在末尾添加" Retrun read
"。(这就是我想从该方法中得到的。
据我所知,我需要以某种方式使用任务。关于如何检索var read
的任何提示?
您可以将返回类型更改为Task<string>
private async Task<string> Lista()
{
var _folder = Windows.Storage.ApplicationData.Current.LocalFolder;
var file = await _folder.GetFileAsync("thefile.txt");
var read = await Windows.Storage.FileIO.ReadTextAsync(file);
return read;
}
来自 MSDN
异步方法的返回类型可以是
Task
、Task<TResult>
或void
。[...] 如果异步方法的 return 语句指定了 TResult 类型的操作数,则将Task<TResult>
指定为该方法的返回类型。如果在方法完成时未返回有意义的值,则使用 Task。也就是说,对该方法的调用将返回一个 Task,但是当任务完成时,等待任务的任何 await 表达式的计算结果都将变为 void。
您需要
将返回类型更改为Task
T
其中T
是预期的返回类型,在本例中为 string
。
private async Task<string> Lista()
{
var _folder = Windows.Storage.ApplicationData.Current.LocalFolder;
var file = await _folder.GetFileAsync("thefile.txt");
var read = await Windows.Storage.FileIO.ReadTextAsync(file);
return read;
}
如果将返回方法签名更改为
private async Task<T> Lista()
其中T
是方法返回的类型ReadTextAsync
那么您应该能够返回它。然后,必须通过调用方法等待它。或者调用方法必须使用 .Result
"解包"它。
因此,假设ReadTextAsync
返回string
您可以尝试这样的事情:
private async Task<string> Lista()
{
var _folder = Windows.Storage.ApplicationData.Current.LocalFolder;
var file = await _folder.GetFileAsync("thefile.txt");
return await Windows.Storage.FileIO.ReadTextAsync(file);
}