導航:首頁 > 廢水知識 > Api非同步回調什麼用

Api非同步回調什麼用

發布時間:2022-02-23 05:01:46

『壹』 同步調用,回調和非同步調用的區別

操作方法如下:
public delegate int AddHandler(int a,int b);
public class 加法類
{
public static int Add(int a, int b)
{
Console.WriteLine("開始計算:" + a + "+" + b);
Thread.Sleep(3000); //模擬該方法運行三秒
Console.WriteLine("計算完成!");
return a + b;
}
}

『貳』 請問什麼叫非同步回調

軟體模塊之間總是存在著一定的介面,從調用方式上,可以把他們分為三類:同步調用、回調和非同步調用。同步調用是一種阻塞式調用,調用方要等待對方執行完畢才返回,它是一種單向調用;回調是一種雙向調用模式,也就是說,被調用方在介面被調用時也會調用對方的介面;非同步調用是一種類似消息或事件的機制,不過它的調用方向剛好相反,介面的服務在收到某種訊息或發生某種事件時,會主動通知客戶方(即調用客戶方的介面)。回調和非同步調用的關系非常緊密,通常我們使用回調來實現非同步消息的注冊,通過非同步調用來實現消息的通知。

雖然已經有了ASP.NET AJAX了,最近學習ASP.NET控制項的時候,逐步理解了原始的控制項非同步回調(代碼取自《ASP.NET 2.0 高級編程》):

首先,在Render事件中添加好一個事件

protected override void RenderContents(HtmlTextWriter output)
{
output.RenderBeginTag(HtmlTextWriterTag.Div);
output.AddAttribute(HtmlTextWriterAttribute.Type, "text");
output.AddAttribute(HtmlTextWriterAttribute.Id, this.ClientID);
output.AddAttribute(HtmlTextWriterAttribute.Name, this.ClientID);
output.AddAttribute(HtmlTextWriterAttribute.Value, this.Text);
output.AddAttribute("OnBlur", "ClientCallback();");
this.AddAttributesToRender(output);
output.RenderBeginTag(HtmlTextWriterTag.Input);
output.RenderEndTag();
output.RenderEndTag();
}

這里最重要的就是output.AddAttribute("OnBlur","ClientCallback();");

然後在OnPreRender事件中,添加如下代碼:

protected override void OnPreRe
nder(EventArgs e)
{
//Page.ClientScript.RegisterClientScriptInclude("UtilityFunctions", "JScript.js");
Page.ClientScript.RegisterStartupScript(typeof(Page), "ControlFocus",
"document.getElementById('" + this.ClientID + "').focus();", true);
Page.ClientScript.RegisterStartupScript(typeof(Page),
"ClientCallback","function ClientCallback() {"+"args=document.getElementById('"+this.ClientID+"').value;
"+Page.ClientScript.GetCallbackEventReference(this,
"args","CallbackHandler",null,"ErrorHandler",true)+"}");
//向伺服器發送請求,由伺服器端生成回調的客戶端腳本。
}

也就是在伺服器端生成客戶端代碼,注意最後一個方法GetCallbackEventReference,我理解的是在伺服器端捕捉了客戶端的請求之後,生成相應的客戶端腳本,在伺服器端回調的時候,客戶端決定用什麼函數處理回調和錯誤。

伺服器端實現介面的一個方法,也就是接收到客戶端的請求之後,由伺服器端先處理,然後再把結果和相應代碼發回客戶端。

#region ICallbackEventHandler Members
public string RaiseCallbackEvent(string eventArgument)
{
int result;
if (!Int32.TryParse(eventArgument, out result))
throw new Exception("The method is not implemented.");
return "Valid Data";
}
#endregion

最後,在jscript.js文件中寫好相應的回調處理函數即可:

var args;
var ctx;
function ValidateText(ctl)
{
if(ctl.value=='')
{
alert("Please enter a value");
ctl.focus();
}
}
function CallbackHandler(args,ctx)
{
alert("The data is valid");
}
function ErrorHandler(args,ctx)
{
alert("The data is not a number");
}

『叄』 回調介面是在回調什麼,什麼時候引發回調,回調是怎麼定義的

回調通常用在非同步調用的程序中,為了防止用戶過多的等待,返回個結果

『肆』 js回調函數有什麼用

傳遞函數作為回調

很容易把一個函數作為參數傳遞。

functionfn(arg1,arg2,callback){
varnum=Math.ceil(Math.random()*(arg1-arg2)+arg2);
callback(num);//傳遞結果
}
fn(10,20,function(num){
console.log("Callbackcalled!Num:"+num);
});//結果為10和20之間的隨機數

可能這樣做看起比較麻煩,甚至有點愚蠢,為何不正常地返回結果?但是當遇上必須使用回調函數之時,你也許就不這樣認為了!

傳統函數以參數形式輸入數據,並且使用返回語句返回值。理論上,在函數結尾處有一個return返回語句,結構上就是:一個輸入點和一個輸出點。這比較容易理解,函數本質上就是輸入和輸出之間實現過程的映射。

但是,當函數的實現過程非常漫長,你是選擇等待函數完成處理,還是使用回調函數進行非同步處理呢?這種情況下,使用回調函數變得至關重要,例如:AJAX請求。若是使用回調函數進行處理,代碼就可以繼續進行其他任務,而無需空等。實際開發中,經常在javascript中使用非同步調用,甚至在這里強烈推薦使用!

下面有個更加全面的使用AJAX載入XML文件的示例,並且使用了call()函數,在請求對象(requested object)上下文中調用回調函數。

functionfn(url,callback){
varhttpRequest;//創建XHR
httpRequest=window.XMLHttpRequest?newXMLHttpRequest()://針對IE進行功能性檢測
window.ActiveXObject?newActiveXObject("Microsoft.XMLHTTP"):undefined;

httpRequest.onreadystatechange=function(){
if(httpRequest.readystate===4&&httpRequest.status===200){//狀態判斷
callback.call(httpRequest.responseXML);
}
};
httpRequest.open("GET",url);
httpRequest.send();
}

fn("text.xml",function(){//調用函數
console.log(this);//此語句後輸出
});

console.log(".");//此語句先輸出

我們請求非同步處理,意味著我們開始請求時,就告訴它們完成之時調用我們的函數。在實際情況中,onreadystatechange事件處理程序還得考慮請求失敗的情況,這里我們是假設xml文件存在並且能被瀏覽器成功載入。這個例子中,非同步函數分配給了onreadystatechange事件,因此不會立刻執行。

最終,第二個console.log語句先執行,因為回調函數直到請求完成才執行。

『伍』 如何理解回調函數的非同步執行

非同步處理不用阻塞來等待處理完成,而是允許後續操作,直至其程序將處理完成,並回調通知此函數
那麼在js中有如下幾種非同步方式:
示例1

var async=function(callback){
//read data
setTimeout(function(){
callback('data');
},1000);//1秒後回調
};
//使用
async(function(data){
alert(data);
});

示例2

var async=function(callback){
var xhr=new XMLHttpRequest();
xhr.open('get','.',true);

xhr.onreadystatechange=function(){
callback(xhr.readyStatus);
};
xhr.send();
};

async(function(data){
alert(data);
});

示例3

var async=function(callback){
var img=new Image();
img.onload=img.onerror=function(){
callback(img);
};
img.src='x.jpg';
};
async(function(data){
alert(data);
});

『陸』 回調函數一般都什麼作用求解

1.回調函數是一個很有用,也很重要的概念。當發生某種事件時,系統或其他函數將會自動調用你定義的一段函數。
2.回調函數就相當於一個中斷處理函數,由系統在符合你設定的條件時自動調用。為此,你需要做三件事:1,聲明;2,定義;3,設置觸發條件,就是在你的函數中把你的回調函數名稱轉化為地址作為一個參數,以便於系統調用。
3.所謂回調函數就是按照一定的形式由你定義並編寫實現內容,當發生某種事件時,而由系統或其它函數來調用的函數。使用回調函數實際上就是在調用某個函數時,將自己編寫的一個函數的地址作為參數傳遞給那個函數。而那個函數在需要的時候,也就是某種事情發生的時候,利用傳遞的函數地址調用回調函數,這時你可以利用這個機會在回調函數中處理消息或完成一定的操作。回調函數只能是全局函數,或者是靜態函數,因為這個函數只是在這個類中使用,所以為了維護類的完整性,我們用類的靜態成員函數來做回調函數。
4.對於很多初學者來說,往往覺得回調函數很神秘,很想知道回調函數的工作原理。本文將要解釋什麼是回調函數、它們有什麼好處、為什麼要使用它們等等問題,在開始之前,假設你已經熟知了函數指針。
(1)什麼是回調函數?
簡而言之,回調函數就是一個通過函數指針調用的函數。如果你把函數的指針(地址)作為參數傳遞給另一個函數,當這個指針被用為調用它所指向的函數時,我們就說這是回調函數。
(2)為什麼要使用回調函數?
因為可以把調用者與被調用者分開。調用者不關心誰是被調用者,所有它需知道的,只是存在一個具有某種特定原型、某些限制條件(如返回值為int)的被調用函數。
如果想知道回調函數在實際中有什麼作用,先假設有這樣一種情況,我們要編寫一個庫,它提供了某些排序演算法的實現,如冒泡排序、快速排序、shell排序、shake排序等等,但為使庫更加通用,不想在函數中嵌入排序邏輯,而讓使用者來實現相應的邏輯;或者,想讓庫可用於多種數據類型(int、float、string),此時,該怎麼辦呢?可以使用函數指針,並進行回調。
回調可用於通知機制,例如,有時要在程序中設置一個計時器,每到一定時間,程序會得到相應的通知,但通知機制的實現者對我們的程序一無所知。而此時,就需有一個特定原型的函數指針,用這個指針來進行回調,來通知我們的程序事件已經發生。實際上,SetTimer()API使用了一個回調函數來通知計時器,而且,萬一沒有提供回調函數,它還會把一個消息發往程序的消息隊列。
另一個使用回調機制的API函數是EnumWindow(),它枚舉屏幕上所有的頂層窗口,為每個窗口調用一個程序提供的函數,並傳遞窗口的處理程序。如果被調用者返回一個值,就繼續進行迭代,否則,退出。EnumWindow()並不關心被調用者在何處,也不關心被調用者用它傳遞的處理程序做了什麼,它只關心返回值,因為基於返回值,它將繼續執行或退出。
不管怎麼說,回調函數是繼續自C語言的,因而,在C++中,應只在與C代碼建立介面,或與已有的回調介面打交道時,才使用回調函數。除了上述情況,在C++中應使用虛擬方法或函數符(functor),而不是回調函數。

『柒』 javascript測試,非同步回調是什麼意思

非同步回調就是發起請求後,不等待響應就去先干別的事
相對於同步就是必須等到響應該請求後才能做別的事

『捌』 .net同步調用和非同步調用分別是什麼意思

這個怎麼說呢,
一般 同步是執行一個事,要等到結束了才會執行下一件事,
非同步呢,是執行了一個事,不管什麼結果,接著去作其它的事,在其它事的過程中,前一件事完了會通知道你,狀態,windows的API大多數都是非同步的,C++時代叫有一種叫回調的技術就是這樣

『玖』 什麼叫做非同步回調

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

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等,有些非同步是同一個線程完成的,有些非同步是不同的線程,所以回調函數里要更新控制項都會提示跨線程訪問控制項的錯誤提示,網上搜索一下很好解決,

『拾』 什麼是介面回調方式 有具體例子嗎

首先理解回調的含義,回調就是當主程序需要的時候(或者到預定義狀態值)調用的介面實現類。介面實際上不能被直接調用的,我們凡是能調用的一定不是介面或者抽象類。
介面回調的很多應用場景是出現在以介面類型為參數的情況下,以匿名內部類的方式傳入而達到。

例如,假設有一個Java的API方法叫作:(其中的ClickEvent就是一個介面)
public void addEventListener(ClickEvent evt);
那麼,你在調用的時候就可以這樣:
addEventListener(new ClickEvent(){
//在這里實現介面中的方法
});
當發生某事件是,API的addEventListener方法就會被組件調用,從而你的完成的匿名內部類代碼就會被組件執行。

仔細想想,其實很不是那麼困難的。

閱讀全文

與Api非同步回調什麼用相關的資料

熱點內容
epp回用 瀏覽:559
飲水機反滲透裝置 瀏覽:173
工業廢水中cod排放 瀏覽:656
頗爾超濾器 瀏覽:768
廚房凈水器怎麼選擇 瀏覽:97
米揚凈水器怎麼用 瀏覽:436
餐飲沒按油煙凈化器有什麼處罰 瀏覽:418
純凈水裡面有什麼 瀏覽:124
如何設置水星路由器ip地址過濾 瀏覽:357
飲水機桶裝水蓋子叫什麼 瀏覽:758
光敏樹脂剛度 瀏覽:86
濾芯扭不開怎麼辦 瀏覽:354
為什麼有些地方水垢特別多 瀏覽:335
超濾膜氣洗與水洗同時進行嗎 瀏覽:973
30厘米米樹脂發光字多少一個 瀏覽:332
水蒸氣蒸餾的安裝步驟 瀏覽:431
ppr廢水管賣多少一斤 瀏覽:76
11款悅動空調濾芯怎麼拆 瀏覽:747
江西反滲透水處理設備廠商 瀏覽:329
江蘇污水提升器 瀏覽:886