2016-12-01 6 views
4

В настоящее время я играю с закрытием и цепями в Swift. Я хорошо знаком с C# стилем async и await, поэтому мне было интересно, как «перевести» следующий фрагмент от C# до Swift.C# async ждет в 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

Если я не ошибаюсь, то, что вы ищете это:

Серийные диспетчерские Очереди:

Последовательные очереди (также известный как частные очереди отправки) выполните одну задачу за раз в том порядке, в котором они добавлены в очередь. Выполняемая в данный момент задача выполняется на отдельном потоке (который может варьироваться от от задачи к задаче), которая управляется очередью отправки. Серийные очереди часто используются для синхронизации доступа к определенному ресурсу. Вы можете создать столько последовательных очередей, сколько вам нужно, и каждая очередь работает одновременно со всеми остальными очередями. В других словах , если вы создаете четыре последовательные очереди, каждая очередь выполняет только одну задачу одновременно, но до четырех задач все равно может выполняться одновременно, по одному из каждой очереди. Для получения информации о том, как создавать последовательные очереди, см. «Создание очередей последовательной отправки».

Swift 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 5 на Swift evolution и вот его ссылка: concurrency proposal. Но если на этот раз вы разрабатываете приложения, используя Cocoa/Cocoa touch, тогда вы можете использовать Dispatch, но я думаю, что у него есть уродливый синтаксис. Я все еще ищу параллелизм в Swift язык

Смежные вопросы