看一下这段代码:
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
的任何提示?
答案 0 :(得分:5)
您可以将退货类型更改为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,但是当Task完成时,任何正在等待Task的await表达式计算为void。
答案 1 :(得分:3)
您需要将返回类型更改为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;
}
。
{{1}}
答案 2 :(得分:0)
如果您将退货方式签名更改为
private async Task<T> Lista()
T
是ReadTextAsync
方法返回的类型,那么您应该能够返回它。
然后必须通过调用方法等待它。或者调用方法必须&#34;展开&#34;它使用.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);
}