Windows Store apps开发[37]调用自各儿的异步函数
Windows Store apps开发[37]调用自己的异步函数
这个方法必须标记为async,因为它有awiat关键字。然后你可以在OnSaveAsAppBarButtonClick函数中这样调用:
但是,当你这样做的话,SaveFile必须要改变一下。它不能再返回void。你可以有许多种方法修改SaveFile,但是可能最简单方法就是将返回类型修改为Task:
在这里,你可能想将方法的名字改为SaveFileAsync,标识这是一个异步方法,可以被等待。
注:本文由BeyondVincent(破船)原创首发
转载请注明出处:BeyondVincent(破船)@DevDiv.com
更多内容请查看下面的帖子
[DevDiv原创]Windows 8 开发Step by Step
注1:本文译自Programming Windows, 6th Edition Charpter 7 Calling Your Own Async Methods
假设你用类似下面的这个方法进行隔离存贮中文件保存的逻辑:
async void SaveFile(string text) { FileSavePicker picker = new FileSavePicker(); picker.DefaultFileExtension = ".txt"; picker.FileTypeChoices.Add("Text", new List<string> { ".txt" }); StorageFile storageFile = await picker.PickSaveFileAsync(); if (storageFile == null) return; await FileIO.WriteTextAsync(storageFile, txtbox.Text); }
这个方法必须标记为async,因为它有awiat关键字。然后你可以在OnSaveAsAppBarButtonClick函数中这样调用:
void OnSaveAsAppBarButtonClick(object sender, RoutedEventArgs args) { SaveFile(txtbox.Text); }
OnSaveAsAppBarButtonClick调用SaveFile发生什么呢:SaveFile开始执行,直到第一个await后的PickSaveFileAsync被调用,在这里,SaveFile函数终止并将控制权返回给OnSaveAsAppBarButtonClick函数。当PickSaveFileAsync结果准备好了,SaveFile剩余的代码继续被执行。
在这种特殊情况下,是正确的。然而,如果如果你想要OnSaveAsAppBarButtonClick方法等待SaveFile的执行,必须包含await关键字,并用async标识OnSaveAsAppBarButtonClick方法:
async void OnSaveAsAppBarButtonClick(object sender, RoutedEventArgs args) { await SaveFile(txtbox.Text); }
但是,当你这样做的话,SaveFile必须要改变一下。它不能再返回void。你可以有许多种方法修改SaveFile,但是可能最简单方法就是将返回类型修改为Task:
async Task SaveFile(string text) { ... }
在这里,你可能想将方法的名字改为SaveFileAsync,标识这是一个异步方法,可以被等待。
未完待续——2012/10/02 11:59 勋