異步回調和同步回調


異步回調就是發起請求后,不等待響應就先去處理自己的響應,它不是處理整個請求,只是處理一小部分,在Web頁上就表現為頁面沒刷新,卻局部更新了數據。
相對於同步就是必須等到響應該請求后才能做別的事,具體到Web頁就是整個頁面刷新了,數據才更新。
下面舉兩個列子:
首先舉個同步調用的例子:

比如你的程序調用了一個方法,這個方法要執行很長很長時間,而且這個時間都不確定,傳統的辦法就是“同步調用”,如下:

private int Func()
{
// 這個方法要執行很長時間,並且返回一個int的值。
}

private void A()
{
int n = Func();
textBox1.Text = n.ToString();
// 這里得到的n就是Func執行出來的結果,並且顯示在textBox1中。
}

采用上述方法,可以叫做同步調用,很明顯它有一個缺點:
Func方法執行的時間過長,程序會阻塞,並且無法繼續執行其他的代碼,給用戶的體驗就是整個程序都會僵着,打開任務管理器會提示該程序沒有響應,用戶以為程序死了,就會手動結束這個程序,

而異步調用就不一樣,在調用完Func這個方法后,不必等待Func執行完,就可以執行其他的代碼,直到Func執行完,才把結果返回,
如果Func提供了異步方法FuncAsync(),就可以這樣調用:

private void A()
{
FuncAsync();
// 這里執行FuncAsync方法,並不會阻塞,程序會在后台執行完FuncAsync方法后,自動調用FuncCompleted方法,並且把結果傳過去。
}

private void FuncCompleted(int n)
{
textBox1.Text = n.ToString();
// 參數n就是異步回調返回的結果,
}
異步回調需要編寫代碼才能支持,網絡傳輸方面的類庫一般都提供異步方法,如socket編程,web服務,ajax,wcf等,有些異步是同一個線程完成的,有些異步是不同的線程,所以回調函數里要更新控件都會提示跨線程訪問控件的錯誤提示。 

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com