Skip to content

Best practice in multi-thread app #37

Description

@everwanna

My app have a dispatchQ(DispatchQueue) for network requests and most other operations, and some other queues for heavy computing. I use PromiseKit like this,

    fetchData().then { objects in
        let tasks = objects.map { calculate($0 }
        return when(fulfilled: tasks)
    }.done {
    }.catch { error in
    }

PromiseKit is simple, I just use promise to replace those callbacks. Now I try to use AwaitKit, but soon I find out that await blocks current queue. dispatchQ can never be blocked because while waiting for network responses, the app might doing other small tasks in dispatchQ. I try to create awaitQ for waiting tasks like this,

    let awaitQ = DispatchQueue(label: "await")
    awaitQ.ak.async {
         let objects = try await(fetchData())
         let tasks = let tasks = objects.map { calculate($0 }
         try await(when(fulfilled: tasks))
    }

However, because dispatchQ have other tasks, awaitQ will still be blocked while waiting for one task. I will try to use DispatchQueue.global(qos: .userInitiated) to start more threads for waiting.

So, what is the best practice for app like this? Is it OK to start lots of threads for await?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions