2 回答

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊
async 關(guān)鍵字表示將被修飾的方法、Lambda 表達(dá)式或匿名方法指定為異步。但并不是說(shuō)被修飾的部分被強(qiáng)制轉(zhuǎn)為異步了,而是使方法可被分割成多個(gè)片段,被修飾的方法依然是同步運(yùn)行,直至到達(dá)其第一個(gè) await 表達(dá)式,此時(shí)會(huì)將方法掛起,直到等待的任務(wù)完成。
而 await 是一個(gè)運(yùn)算符,應(yīng)用于一個(gè)異步方法的任務(wù)掛起方法的執(zhí)行,直到等待任務(wù)完成。與 async 配合使用。
=> 確實(shí)是 Lambda 表達(dá)式。
Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { listbox.ItemsSource = items; }); |
等效于:
Dispatcher.RunAsync(CoreDispatcherPriority.Normal, delegate { listbox.ItemsSource = items; }); |
以上的代碼如果用同步的話就是:
RssService.GetRssItems( rssURL.Text, (items) => { listbox.ItemsSource = items; }, (exception) => { new MessageDialog(exception).ShowAsync(); }, null ); |
這樣是不是好理解一些?

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊
C# 4.5中引入了async 和 await。這兩個(gè)關(guān)鍵字可以讓你更方便的寫(xiě)出異步代碼。
async (items) => { },這應(yīng)該是匿名方法,我寫(xiě)了個(gè)類似的代碼,可以參考一下,提供些思路:
class Program { static void Main( string [] args) { MyClass myClass= new MyClass(); Console.ReadLine(); } } public class MyClass { public MyClass() { //這里不會(huì)阻塞 ForEach(async () => { double result = await GetValueAsync(1234.5, 1.01); //此處會(huì)開(kāi)新線程處理GetValueAsync任務(wù),然后方法馬上返回 //這之后的所有代碼都會(huì)被封裝成委托,在GetValueAsync任務(wù)完成時(shí)調(diào)用 Console.WriteLine( "Value is : " + result); }); Console.WriteLine( "MyClass() End." ); } public Task< double > GetValueAsync( double num1, double num2) { return Task.Run(() => { for ( int i = 0; i < 100000; i++) { num1 = num1 / num2; } return num1; }); } public void ForEach(Action action) { action(); } } |
- 2 回答
- 0 關(guān)注
- 100 瀏覽
添加回答
舉報(bào)