JetForMe
(Rick M)
November 23, 2021, 7:49am
1
I've got some code that needs to make a handful of await
calls of Void
methods:
public
func
idle(at inTemp: UInt16)
async
throws
{
await self.eurotherm.stopProgram()
try await set(temperature: inTemp)
try await set(inputSensor: .furnace)
try await self.alicat1.set(flowRate: 0.0)
try await self.alicat2.set(flowRate: 0.0)
}
It’s possible for those to throw, but if one throws I want it to attempt the rest. I know with functions that return a value I can write async let foo =
, but what do I do for Void
functions? And even in the parallel case of functions that return values, will they all be guaranteed to run even if one should throw?
Is this where I need a task group, even though it's a static number of tasks?
1 Like
somu
(somu)
November 24, 2021, 2:37pm
2
You could use try?
to ignore any error that occurs, that way it would continue execution.
I am assuming running in parallel is not your requirement, if you want them to run in parallel then you could use withThrowingTaskGroup
instead
Given below is an example:
func f1() async {
try? await doSomething(number: -10)
try? await doSomething(number: 20)
try? await doSomething(number: -30)
try? await doSomething(number: 40)
}
func doSomething(number: Int) async throws {
if number >= 0 {
print("number = \(number)")
} else {
throw NSError(domain: "some error", code: 11, userInfo: nil)
}
}
Task {
await f1()
}
1 Like
JetForMe
(Rick M)
November 24, 2021, 7:13pm
3
Well, that's so obvious I am now embarrassed. Thanks!
somu
(somu)
November 25, 2021, 2:23am
4
No worries, often happens with me as well, quite a lot of concepts for me to learn / understand, so sometimes I miss the obvious :)
1 Like