2016-12-01 117 views
4

我目前在Swift中使用閉包和鏈接完成。我對和awaitC#風格非常熟悉,所以我想知道如何將C#中的以下代碼段「翻譯」爲SwiftC#異步在Swift中等待

public async Task SomeFunction(string inputString) 
{ 
    var first = await GetFirstVariableAsync(inputString); 
    var second = await GetSecondVariableAsync(first); 

    if (second == "some condition") 
    { 
     first = await GetFirstVariableAsync(inputString); 
     var second = await GetSecondVariableAsync(first); 
    } 
} 

是否不必嵌套多個完成塊Swift也有類似的結構像await,等待一個函數來完成,?

謝謝

回答

1

如果我沒有弄錯,你要找的是:

串行調度隊列:

串行隊列(也稱爲私有調度隊列)一次執行一個任務 ,按其添加到隊列的順序執行。當前正在執行的任務的 在由調度隊列管理的不同線程上運行(可以改變從任務到任務的 )。串行 隊列通常用於同步對特定資源的訪問。 您可以根據需要創建儘可能多的串行隊列,並且每個隊列 可以針對所有其他隊列同時運行。在其他 字中,如果創建四個串行隊列,則每個隊列一次只執行一個 任務,但最多可以同時執行四個任務,每個隊列可以執行一個 。有關如何創建串行隊列的信息,請參閱 請參閱創建串行調度隊列。

斯威夫特3:

let serialQueue = DispatchQueue(label: "serialQueue") 

serialQueue.sync { 
    print("running first task") 
} 

serialQueue.sync { 
    print("I will wait the first task and then I'll do my own task") 
} 
+0

感謝您的答案 - 是否有可能訪問不同的「隊列項目」中的參數? – nor0x

0

目前concurrency in Swift language現在還沒有。它仍然是Swift 5Swift evolution的建議,這裏是它的鏈接:concurrency proposal。但是,如果這次您正在使用Cocoa/Cocoa touch開發應用程序,那麼您可以使用Dispatch,但我認爲它的語法很難看。我仍然在尋找併發Swift語言