2012-09-17 46 views
0

我在使用不同的應用程序和語言的異步任務時遇到了一些困難。不召回的異步任務

的典型用法,據我的理解是這樣的:

asyncTask(x,y){ 
    //do something 
} 

alwaysRunWhenAsyncIsFinished(){ 
    //continue with the app has to 
    //happen here 
} 

... 

mainProgramFunction(){ 
    asyncTask(5,6); 
} 

那麼在這種情況下,你有,直到異步任務恰好編寫程序,而當你要調用的AsyncTask,您必須在Recall函數中編寫繼續的代碼,這是在異步任務之後總是最後發生的函數。

有寫東西像這樣的可能性:

asyncTask(x,y){ 
    //do something 
} 


... 

mainProgramFunction(){ 
    asyncTask(5,6); 

    continuingCode();//But happens AFTER asyncTask is done. 
} 

我完全不知道這是可以或不可以。也許這只是可能的一個特定的SDK,它提供了這種異步任務?

最後一個選項可能是我沒有真正理解異步任務,以及如何使用它們。

回答

0

Kick off a task 

Keep doing stuff 

程序結構的模型是由很多編程語言的支持。例如在Java中可以有

Runnable myRunnable = new MyRunnable(); 

new Thread(myRunnable).start(); 

doSomeMore(); 

但是,這可能會有點混亂。你正在解僱線程,這可能會無限期地運行,所以當線程全部停止工作時,你的「主線」可能會結束。你沒有「監督」線索來跟蹤這項工作。更糟糕的是,你最終可能會燒掉過多的線程併吞噬所有的處理能力。

因此,在不同的線程中進行所有處理是相當普遍的,事件驅動的編程風格。所以你有一個線程監聽事件,比如工作線程的完成和決定要創建哪些新工作人員等等。或者可能是一個監聽新請求的線程(例如,用戶點擊某些內容,或創建文件或到達消息)並決定是否以及何時啓動工作人員。

一般現代用戶界面幾乎完全是事件驅動的,大部分代碼是在事件處理(做當用戶點擊該),你不寫自己的主,用戶界面框架是在控制並調用您的代碼。

我想你會發現研究a tutorial關於事件驅動的編程很有幫助。