Task not executing at all

I have an 8th generation iPad, now updated with iPadOS 16.2 (20C65) and I have an issue that I also saw on earlier 16.* betas.

Task is not executing at all.

This is so frustrating because I have adopted async/await in my app, I support iOS 15+, everything was working fine but now that stuff inside Task { } is not executed my app seems to be broken. (Note: my main device is an iPhone 11, still on iOS 16.0, and it works fine there.)

It is also frustrating to see no other developers are complaining about this, like it happens only with my app. I have debugged with print statements and breakpoints and I can say for sure that stuff is not executing.

Does anybody have any ideas? Anything else I can try?

FB11866066

In situations such as this I like to start by establishing a baseline. If you create a new test app that runs a trivial Task, does that work?

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

It is working now :-/ I've seen the issue before and eventually it fixed itself, I presumed from updating to a new OS beta. Now I see it works, it's the same app, same device and same OS version. I will report back if I see the issue again and do the minimal app test, thanks for replying!

New report:

  • Started failing again
  • Made minimal app with a Task and works fine
  • Problematic app: I saw that Tasks initially work but eventually stop working. I pinned it down to the use of this API:

https://developer.apple.com/documentation/mediaplayer/mpmediaitemartwork/1621736-image

Attempting to get a UIImage out of a MPMediaItemArtwork object is enough to break it (!!!) Again, not all devices and possibly not all OS versions, even not every time I launch the app on the same device. But when it fails systematically, I comment out the above API usage and the issue is gone.

Is this something you can investigate further?

If you add your MPMediaItemArtwork code to your minimal app, do things start to fail there?

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

Nope, it works fine there.

OK, that’s a good baseline. So there’s something about your specific app that’s triggering this problem.

Are you able to run your app in the simulator? If so, does the problem reproduce there?

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

Kind of. I can run it in the simulator but the music library is not available in the simulator, so I mock some library items. In this scenario the bit that uses MPMediaItemArtwork is not run at all. I'm not seeing issues with Tasks there.

I can run it in the simulator but the music library is not available in the simulator

Ah, OK, that won’t help then.

My best guess here is that you’ve managed to ‘consume’ all the threads in the Swift concurrency cooperative thread pool, which means that there’s no thread available to run your task. Before you continue here, I recommend that you watch WWDC 2021 Session 10254 Swift concurrency: Behind the scenes for some important background on this.

When your app gets into the problematic state, stop in the debugger and enter this command:

(lldb) thread backtrace all 

What do you see? Specifically, how many threads have a queue name like this:

(lldb) thread backtrace all 
  thread #2, queue = 'com.apple.root.user-initiated-qos.cooperative'
  …

And what do their backtraces look like?

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

Whoa very interesting.

I have 6 of such threads and they all seem to be at the MPMediaItemArtwork.image(at:) call for different table cells. They are like this:

thread #9, queue = 'com.apple.root.user-initiated-qos.cooperative'
  frame #0: 0x00000002106bf5e0 libsystem_kernel.dylib`__ulock_wait + 8
  frame #1: 0x000000010307abdc libdispatch.dylib`_dlock_wait + 56
  frame #2: 0x000000010307a990 libdispatch.dylib`_dispatch_thread_event_wait_slow + 56
  frame #3: 0x000000010308bc54 libdispatch.dylib`__DISPATCH_WAIT_FOR_QUEUE__ + 384
  frame #4: 0x000000010308b594 libdispatch.dylib`_dispatch_sync_f_slow + 180
  frame #5: 0x00000001f6ee6940 MusicLibrary`-[ML3ArtworkConfiguration supportedSizesForMediaType:artworkType:] + 248
  frame #6: 0x00000001e37c64ec MediaPlayer`-[MPArtworkConfiguration supportedSizesForMediaType:artworkType:] + 68
  frame #7: 0x00000001e3704290 MediaPlayer`-[MPMediaLibraryArtwork validSizes] + 120
  frame #8: 0x00000001e379c814 MediaPlayer`-[MPMediaLibraryArtworkDataSource _existingRepresentationForArtworkCatalog:fromCacheOnly:] + 208
  frame #9: 0x00000001e379c9c0 MediaPlayer`-[MPMediaLibraryArtworkDataSource existingRepresentationForArtworkCatalog:] + 48
  frame #10: 0x00000001e363ac50 MediaPlayer`-[MPArtworkCatalog bestImageFromDisk] + 40
  frame #11: 0x00000001e368e6a8 MediaPlayer`__70-[MPConcreteMediaItemArtwork initWithArtworkCatalog:allowsNetworking:]_block_invoke + 296
(...)

That ulock_wait at the top seems to suggest there is a concurrency issue with this API, right? Or I might be using the wrong kind of queue! I will definitely watch that session. Thanks for the insight!!!!

Accepted Answer

All right! I seem to have fixed it with your help!

I had an async function to get image artwork to display in table view cells. Each cell would start a Task to call this function.

The function would first attempt to get the media item's embedded artwork as UIImage by calling MPMediaItemArtwork.image(at:). If this returned nil for some reason, it would then attempt to fetch it via MusicKit using a MusicCatalogResourceRequest. This is why the function is async and why the cell makes the call in a Task.

I split this function in two, one for the embedded artwork (sync) and one for MusicKit artwork (async). The cell calls the first one and only if that fails uses a Task to call the other one.

Now it works and when I pause the app I find no 'com.apple.root.user-initiated-qos.cooperative' threads.

I guess the takeaway is that that API is not thread safe but maybe you can provide some other insight given the above backtrace? Thank you!!

I’m glad you’re making progress.

but maybe you can provide some other insight given the above backtrace?

You posted the first 12 frames in that backtrace, but that’s not enough to show how your app code calls the system. Can you post an example of the full backtrace?

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

Here's one complete thread. I tried posting the whole thing but it's beyond the post size limit.

  thread #4, queue = 'com.apple.root.user-initiated-qos.cooperative'
  frame #0: 0x00000002106bf5e0 libsystem_kernel.dylib`__ulock_wait + 8
  frame #1: 0x000000010441abdc libdispatch.dylib`_dlock_wait + 56
  frame #2: 0x000000010441a990 libdispatch.dylib`_dispatch_thread_event_wait_slow + 56
  frame #3: 0x000000010442bc54 libdispatch.dylib`__DISPATCH_WAIT_FOR_QUEUE__ + 384
  frame #4: 0x000000010442b594 libdispatch.dylib`_dispatch_sync_f_slow + 180
  frame #5: 0x00000001f6ee6940 MusicLibrary`-[ML3ArtworkConfiguration supportedSizesForMediaType:artworkType:] + 248
  frame #6: 0x00000001e37c64ec MediaPlayer`-[MPArtworkConfiguration supportedSizesForMediaType:artworkType:] + 68
  frame #7: 0x00000001e3704290 MediaPlayer`-[MPMediaLibraryArtwork validSizes] + 120
  frame #8: 0x00000001e379c814 MediaPlayer`-[MPMediaLibraryArtworkDataSource _existingRepresentationForArtworkCatalog:fromCacheOnly:] + 208
  frame #9: 0x00000001e379c9c0 MediaPlayer`-[MPMediaLibraryArtworkDataSource existingRepresentationForArtworkCatalog:] + 48
  frame #10: 0x00000001e363ac50 MediaPlayer`-[MPArtworkCatalog bestImageFromDisk] + 40
  frame #11: 0x00000001e368e6a8 MediaPlayer`__70-[MPConcreteMediaItemArtwork initWithArtworkCatalog:allowsNetworking:]_block_invoke + 296
  frame #12: 0x00000001025a7d28 VinylFetish`@nonobjc MPMediaItemArtwork.image(at:) at <compiler-generated>:0
  frame #13: 0x00000001025a7cd4 VinylFetish`protocol witness for MediaArtwork.image(at:) in conformance MPMediaItemArtwork at <compiler-generated>:0
  frame #14: 0x00000001026671bc VinylFetish`MKHelper.fetchArtwork(item=0x0000000280e331b0, imageSize=80, self=VinylFetish.MKHelper @ scalar) at MKHelper.swift:166:43
  frame #15: 0x000000010244bd18 VinylFetish`closure #1 in AlbumCell.updateFromItem(self=0x000000011e9d4800, item=0x0000000280e331b0) at AlbumCell.swift:154
  frame #16: 0x000000010244da54 VinylFetish`partial apply for closure #1 in AlbumCell.updateFromItem() at <compiler-generated>:0
  frame #17: 0x0000000102312eac VinylFetish`thunk for @escaping @callee_guaranteed @Sendable @async () -> (@out A) at <compiler-generated>:0
  frame #18: 0x0000000102312ffc VinylFetish`partial apply for thunk for @escaping @callee_guaranteed @Sendable @async () -> (@out A) at <compiler-generated>:0

Here's one complete thread.

One thread is not going to be enough, alas.

I tried posting the whole thing but it's beyond the post size limit.

OK. Copy the thread backtrace all output and paste it into a text file and then attach that.

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

Hey @eskimo I'm facing the same issue that at some point Tasks are not executing anymore and here is my full stack if you could help check what's causing it to stuck:

(lldb) thread backtrace all 

* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 43.1
  * frame #0: 0x00000001037fd310 Wrino`closure #5 in closure #1 in closure #1 in MsgsView.body.getter(self=Wrino.MsgsView @ 0x000000016ddeb180, scrollProxy=SwiftUI.ScrollViewProxy @ 0x0000000114472208) at MsgsView.swift:118:37
    frame #1: 0x00000001aca0f134 SwiftUI`___lldb_unnamed_symbol66433 + 28
    frame #2: 0x00000001ac964e08 SwiftUI`___lldb_unnamed_symbol62780 + 28
    frame #3: 0x00000001aca0f134 SwiftUI`___lldb_unnamed_symbol66433 + 28
    frame #4: 0x00000001ac945adc SwiftUI`___lldb_unnamed_symbol62239 + 2840
    frame #5: 0x00000001ac9e706c SwiftUI`___lldb_unnamed_symbol65493 + 448
    frame #6: 0x00000001ac958e10 SwiftUI`___lldb_unnamed_symbol62511 + 308
    frame #7: 0x00000001ac95b5f8 SwiftUI`___lldb_unnamed_symbol62589 + 32
    frame #8: 0x00000001ab141860 UIKitCore`-[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1980
    frame #9: 0x00000001aa614b0c QuartzCore`CA::Layer::layout_if_needed(CA::Transaction*) + 500
    frame #10: 0x00000001aa6281c0 QuartzCore`CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 148
    frame #11: 0x00000001aa639534 QuartzCore`CA::Context::commit_transaction(CA::Transaction*, double, double*) + 444
    frame #12: 0x00000001aa66e930 QuartzCore`CA::Transaction::commit() + 652
    frame #13: 0x00000001aa657bb4 QuartzCore`CA::Transaction::flush_as_runloop_observer(bool) + 88
    frame #14: 0x00000001ab6410a0 UIKitCore`_UIApplicationFlushCATransaction + 52
    frame #15: 0x00000001ab78f498 UIKitCore`_UIUpdateSequenceRun + 84
    frame #16: 0x00000001abddb410 UIKitCore`schedulerStepScheduledMainSection + 172
    frame #17: 0x00000001abdda5dc UIKitCore`runloopSourceCallback + 92
    frame #18: 0x00000001a903df34 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28
    frame #19: 0x00000001a904a30c CoreFoundation`__CFRunLoopDoSource0 + 176
    frame #20: 0x00000001a8fce1d0 CoreFoundation`__CFRunLoopDoSources0 + 244
    frame #21: 0x00000001a8fe3b8c CoreFoundation`__CFRunLoopRun + 836
    frame #22: 0x00000001a8fe8ec0 CoreFoundation`CFRunLoopRunSpecific + 612
    frame #23: 0x00000001e303f368 GraphicsServices`GSEventRunModal + 164
    frame #24: 0x00000001ab4de86c UIKitCore`-[UIApplication _run] + 888
    frame #25: 0x00000001ab4de4d0 UIKitCore`UIApplicationMain + 340
    frame #26: 0x00000001acaf7368 SwiftUI`___lldb_unnamed_symbol71622 + 168
    frame #27: 0x00000001aca5839c SwiftUI`___lldb_unnamed_symbol68012 + 152
    frame #28: 0x00000001aca41750 SwiftUI`___lldb_unnamed_symbol67524 + 128
    frame #29: 0x0000000102c92fd4 Wrino`static WrinoApp.$main(self=Wrino.WrinoApp) at WrinoApp.swift:13:1
    frame #30: 0x0000000102cd86d4 Wrino`main at WrinoApp.swift:0
    frame #31: 0x00000001c780a960 dyld`start + 2528
  thread #7, queue = 'com.apple.root.user-initiated-qos.cooperative'
    frame #0: 0x00000001e68dd5e0 libsystem_kernel.dylib`__ulock_wait + 8
    frame #1: 0x000000010aafebdc libdispatch.dylib`_dlock_wait + 56
    frame #2: 0x000000010aafe990 libdispatch.dylib`_dispatch_thread_event_wait_slow + 56
    frame #3: 0x000000010ab0fc54 libdispatch.dylib`__DISPATCH_WAIT_FOR_QUEUE__ + 384
    frame #4: 0x000000010ab0f594 libdispatch.dylib`_dispatch_sync_f_slow + 180
    frame #5: 0x000000010244dc04 Wrino`read(block=0x00000001031b5dc8 Wrino`partial apply forwarder for closure #1 () -> () in FluentKit.Model.save(_: Swift.String, isNew: Swift.Bool, exists: Swift.Bool) async throws -> () at ) at Helpers.swift:873:20
    frame #6: 0x00000001031a80dc Wrino`Model.save(src="addStory", isNew=false, exists=false, self=0x000000013bde5500) at DbCo.swift:38:9
    frame #7: 0x000000010351ab34 Wrino`closure #2 in StoryRepo.upsertLocalStory(story=0x000000013bde5500, completion=0x000000010354ee38 Wrino`partial apply forwarder for closure #1 () -> () in Wrino.StoryRepo.upserLocalStorysInSequence(_: Swift.Array, action: Swift.Optional<(Wrino.Story) -> ()>, curIdx: Swift.Int, completion: Swift.Optional<() -> ()>) -> () at ) at StoryRepo.swift:266
    frame #8: 0x000000010351b528 Wrino`partial apply for closure #2 in StoryRepo.upsertLocalStory(_:completion:) at :0
    frame #9: 0x0000000102050de8 Wrino`thunk for @escaping @callee_guaranteed @Sendable @async () -> (@out A) at :0
    frame #10: 0x00000001020510c8 Wrino`partial apply for thunk for @escaping @callee_guaranteed @Sendable @async () -> (@out A) at :0
  thread #10, name = 'NIO-ELT-0-#0'
    frame #0: 0x00000001e68de3e0 libsystem_kernel.dylib`kevent + 8
    frame #1: 0x0000000104fd3f14 Wrino`@nonobjc kevent(_:_:_:_:_:_:) at :0
    frame #2: 0x0000000104ff8288 Wrino`closure #1 in static KQueue.kevent(kq=8, changelist=nil, nchanges=0, eventlist=0x10d446a80, nevents=64, timeout=nil) at System.swift:900:13
    frame #3: 0x0000000104ff8c08 Wrino`partial apply for closure #1 in static KQueue.kevent(kq:changelist:nchanges:eventlist:nevents:timeout:) at :0
    frame #4: 0x0000000104fd62ac Wrino`syscall(blocking=false, function="kevent(kq:changelist:nchanges:eventlist:nevents:timeout:)", body=0x104ff8bdc) at System.swift:255:23
    frame #5: 0x0000000104ff7b70 Wrino`static KQueue.kevent(kq=8, changelist=nil, nchanges=0, eventlist=0x10d446a80, nevents=64, timeout=nil, self=NIOPosix.KQueue) at System.swift:899:20
    frame #6: 0x0000000104f86d00 Wrino`closure #1 in Selector.whenReady0(ts=nil, self=0x000000010e074f50) at SelectorKqueue.swift:212:28
    frame #7: 0x0000000104f8c620 Wrino`partial apply for closure #1 in Selector.whenReady0(strategy:onLoopBegin:_:) at :0
    frame #8: 0x0000000104f5d2d8 Wrino`Optional.withUnsafeOptionalPointer(body=0x104f8c60c, self=nil) at SelectorGeneric.swift:31:24
    frame #9: 0x0000000104f836dc Wrino`Selector.whenReady0(strategy=block, loopStart=0x0000000104f5bb0c Wrino`partial apply forwarder for closure #1 () -> () in closure #2 () throws -> () in NIOPosix.SelectableEventLoop.run() throws -> () at , body=0x104f5bb14, self=0x000000010e074f50) at SelectorKqueue.swift:211:34
    frame #10: 0x0000000104f6ea4c Wrino`Selector.whenReady(strategy=block, loopStart=0x0000000104f5bb0c Wrino`partial apply forwarder for closure #1 () -> () in closure #2 () throws -> () in NIOPosix.SelectableEventLoop.run() throws -> () at , body=0x104f5bb14, self=0x000000010e074f50) at SelectorGeneric.swift:288:18
    frame #11: 0x0000000104f4fb38 Wrino`closure #2 in SelectableEventLoop.run(self=0x000000010cc57980, nextReadyTask=nil) at SelectableEventLoop.swift:480:36
    frame #12: 0x0000000104f5a7e8 Wrino`partial apply for closure #2 in SelectableEventLoop.run() at :0
    frame #13: 0x0000000104f3b5a0 Wrino`closure #1 in withAutoReleasePool(execute=0x104f5a7cc) at SelectableEventLoop.swift:26:13
    frame #14: 0x0000000104f3b6c4 Wrino`partial apply for closure #1 in withAutoReleasePool<a>(_:) at :0
    frame #15: 0x00000001cfee6308 libswiftObjectiveC.dylib`ObjectiveC.autoreleasepool<τ_0_0>(invoking: () throws -> τ_0_0) throws -> τ_0_0 + 64
    frame #16: 0x0000000104f3b2e0 Wrino`withAutoReleasePool(execute=0x104f5a7cc) at SelectableEventLoop.swift:25:16
    frame #17: 0x0000000104f4d3f0 Wrino`SelectableEventLoop.run(self=0x000000010cc57980) at SelectableEventLoop.swift:479:17
    frame #18: 0x0000000104e603b8 Wrino`static MultiThreadedEventLoopGroup.runTheLoop(thread=0x000000010d0e77d0, parentGroup=0x000000010c6a5f80, canEventLoopBeShutdownIndividually=false, selectorFactory=0x0000000104e624a0 Wrino`implicit closure #1 () throws -> NIOPosix.Selector in NIOPosix.MultiThreadedEventLoopGroup.init(numberOfThreads: Swift.Int) -> NIOPosix.MultiThreadedEventLoopGroup at , initializer=0x0000000104e70500 Wrino`partial apply forwarder for reabstraction thunk helper from @escaping @callee_guaranteed (@in_guaranteed NIOPosix.NIOThread) -> (@out ()) to @escaping @callee_guaranteed (@guaranteed NIOPosix.NIOThread) -> () at , callback=0x0000000104e70660 Wrino`partial apply forwarder for closure #1 (NIOPosix.SelectableEventLoop) -> () in closure #1 (NIOPosix.NIOThread) -> () in static NIOPosix.MultiThreadedEventLoopGroup.setupThreadAndEventLoop(name: Swift.String, parentGroup: NIOPosix.MultiThreadedEventLoopGroup, selectorFactory: () throws -> NIOPosix.Selector, initializer: (NIOPosix.NIOThread) -> ()) -> NIOPosix.SelectableEventLoop at , self=NIOPosix.MultiThreadedEventLoopGroup) at MultiThreadedEventLoopGroup.swift:95:22
    frame #19: 0x0000000104e61730 Wrino`closure #1 in static MultiThreadedEventLoopGroup.setupThreadAndEventLoop(t=0x000000010d0e77d0, parentGroup=0x000000010c6a5f80, selectorFactory=0x0000000104e624a0 Wrino`implicit closure #1 () throws -> NIOPosix.Selector in NIOPosix.MultiThreadedEventLoopGroup.init(numberOfThreads: Swift.Int) -> NIOPosix.MultiThreadedEventLoopGroup at , initializer=0x0000000104e70500 Wrino`partial apply forwarder for reabstraction thunk helper from @escaping @callee_guaranteed (@in_guaranteed NIOPosix.NIOThread) -> (@out ()) to @escaping @callee_guaranteed (@guaranteed NIOPosix.NIOThread) -> () at , lock=NIOConcurrencyHelpers.NIOLock @ 0x0000000117e090a0, _loop=0x000000010cc57980, loopUpAndRunningGroup=0x000000010e04bdc0) at MultiThreadedEventLoopGroup.swift:116:41
    frame #20: 0x0000000104e705e4 Wrino`partial apply for closure #1 in static MultiThreadedEventLoopGroup.setupThreadAndEventLoop(name:parentGroup:selectorFactory:initializer:) at :0
    frame #21: 0x0000000104ffab5c Wrino`thunk for @escaping @callee_guaranteed (@guaranteed NIOThread) -> () at :0
    frame #22: 0x0000000105005218 Wrino`closure #1 in static ThreadOpsPosix.run($0=0x10d0e6750) at ThreadPosix.swift:105:13
    frame #23: 0x0000000105005580 Wrino`@objc closure #1 in static ThreadOpsPosix.run(handle:args:detachThread:) at :0
    frame #24: 0x00000001f6ffa6cc libsystem_pthread.dylib`_pthread_start + 148
  thread #11, name = 'com.apple.uikit.eventfetch-thread'
    frame #0: 0x00000001e68dcaa8 libsystem_kernel.dylib`mach_msg2_trap + 8
    frame #1: 0x00000001e68eefc4 libsystem_kernel.dylib`mach_msg2_internal + 80
    frame #2: 0x00000001e68ef204 libsystem_kernel.dylib`mach_msg_overwrite + 388
    frame #3: 0x00000001e68dcfec libsystem_kernel.dylib`mach_msg + 24
    frame #4: 0x00000001a8fe2ad4 CoreFoundation`__CFRunLoopServiceMachPort + 160
    frame #5: 0x00000001a8fe3d18 CoreFoundation`__CFRunLoopRun + 1232
    frame #6: 0x00000001a8fe8ec0 CoreFoundation`CFRunLoopRunSpecific + 612
    frame #7: 0x00000001a33270d4 Foundation`-[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 212
    frame #8: 0x00000001a3326fbc Foundation`-[NSRunLoop(NSRunLoop) runUntilDate:] + 64
    frame #9: 0x00000001ab61372c UIKitCore`-[UIEventFetcher threadMain] + 436
    frame #10: 0x00000001a33405a8 Foundation`__NSThread__start__ + 716
    frame #11: 0x00000001f6ffa6cc libsystem_pthread.dylib`_pthread_start + 148
  thread #12, queue = 'com.apple.root.user-initiated-qos.cooperative'
    frame #0: 0x00000001e68dd5e0 libsystem_kernel.dylib`__ulock_wait + 8
    frame #1: 0x000000010aafebdc libdispatch.dylib`_dlock_wait + 56
    frame #2: 0x000000010aafe990 libdispatch.dylib`_dispatch_thread_event_wait_slow + 56
    frame #3: 0x000000010ab0fc54 libdispatch.dylib`__DISPATCH_WAIT_FOR_QUEUE__ + 384
    frame #4: 0x000000010ab0f594 libdispatch.dylib`_dispatch_sync_f_slow + 180
    frame #5: 0x000000010244dc04 Wrino`read(block=0x00000001031b5dc8 Wrino`partial apply forwarder for closure #1 () -> () in FluentKit.Model.save(_: Swift.String, isNew: Swift.Bool, exists: Swift.Bool) async throws -> () at ) at Helpers.swift:873:20
    frame #6: 0x00000001031a80dc Wrino`Model.save(src="addStory", isNew=false, exists=false, self=0x000000010cc2a0c0) at DbCo.swift:38:9
    frame #7: 0x000000010351ab34 Wrino`closure #2 in StoryRepo.upsertLocalStory(story=0x000000010cc2a0c0, completion=0x000000010354ee38 Wrino`partial apply forwarder for closure #1 () -> () in Wrino.StoryRepo.upserLocalStorysInSequence(_: Swift.Array, action: Swift.Optional<(Wrino.Story) -> ()>, curIdx: Swift.Int, completion: Swift.Optional<() -> ()>) -> () at ) at StoryRepo.swift:266
    frame #8: 0x000000010351b528 Wrino`partial apply for closure #2 in StoryRepo.upsertLocalStory(_:completion:) at :0
    frame #9: 0x0000000102050de8 Wrino`thunk for @escaping @callee_guaranteed @Sendable @async () -> (@out A) at :0
    frame #10: 0x00000001020510c8 Wrino`partial apply for thunk for @escaping @callee_guaranteed @Sendable @async () -> (@out A) at :0
  thread #13, queue = 'com.apple.root.user-initiated-qos.cooperative'
    frame #0: 0x00000001e68dd5e0 libsystem_kernel.dylib`__ulock_wait + 8
    frame #1: 0x000000010aafebdc libdispatch.dylib`_dlock_wait + 56
    frame #2: 0x000000010aafe990 libdispatch.dylib`_dispatch_thread_event_wait_slow + 56
    frame #3: 0x000000010ab0fc54 libdispatch.dylib`__DISPATCH_WAIT_FOR_QUEUE__ + 384
    frame #4: 0x000000010ab0f594 libdispatch.dylib`_dispatch_sync_f_slow + 180
    frame #5: 0x000000010244dc04 Wrino`read(block=0x00000001031b5dc8 Wrino`partial apply forwarder for closure #1 () -> () in FluentKit.Model.save(_: Swift.String, isNew: Swift.Bool, exists: Swift.Bool) async throws -> () at ) at Helpers.swift:873:20
    frame #6: 0x00000001031a80dc Wrino`Model.save(src="addStory", isNew=false, exists=false, self=0x000000013bdd9480) at DbCo.swift:38:9
    frame #7: 0x000000010351ab34 Wrino`closure #2 in StoryRepo.upsertLocalStory(story=0x000000013bdd9480, completion=0x000000010354ee38 Wrino`partial apply forwarder for closure #1 () -> () in Wrino.StoryRepo.upserLocalStorysInSequence(_: Swift.Array, action: Swift.Optional<(Wrino.Story) -> ()>, curIdx: Swift.Int, completion: Swift.Optional<() -> ()>) -> () at ) at StoryRepo.swift:266
    frame #8: 0x000000010351b528 Wrino`partial apply for closure #2 in StoryRepo.upsertLocalStory(_:completion:) at :0
    frame #9: 0x0000000102050de8 Wrino`thunk for @escaping @callee_guaranteed @Sendable @async () -> (@out A) at :0
    frame #10: 0x00000001020510c8 Wrino`partial apply for thunk for @escaping @callee_guaranteed @Sendable @async () -> (@out A) at :0
  thread #15, name = 'com.apple.NSURLConnectionLoader'
    frame #0: 0x00000001e68dcaa8 libsystem_kernel.dylib`mach_msg2_trap + 8
    frame #1: 0x00000001e68eefc4 libsystem_kernel.dylib`mach_msg2_internal + 80
    frame #2: 0x00000001e68ef204 libsystem_kernel.dylib`mach_msg_overwrite + 388
    frame #3: 0x00000001e68dcfec libsystem_kernel.dylib`mach_msg + 24
    frame #4: 0x00000001a8fe2ad4 CoreFoundation`__CFRunLoopServiceMachPort + 160
    frame #5: 0x00000001a8fe3d18 CoreFoundation`__CFRunLoopRun + 1232
    frame #6: 0x00000001a8fe8ec0 CoreFoundation`CFRunLoopRunSpecific + 612
    frame #7: 0x00000001aa354078 CFNetwork`___lldb_unnamed_symbol14262 + 392
    frame #8: 0x00000001a33405a8 Foundation`__NSThread__start__ + 716
    frame #9: 0x00000001f6ffa6cc libsystem_pthread.dylib`_pthread_start + 148
  thread #44, queue = 'com.apple.root.user-initiated-qos.cooperative'
    frame #0: 0x00000001e68dd5e0 libsystem_kernel.dylib`__ulock_wait + 8
    frame #1: 0x000000010aafebdc libdispatch.dylib`_dlock_wait + 56
    frame #2: 0x000000010aafe990 libdispatch.dylib`_dispatch_thread_event_wait_slow + 56
    frame #3: 0x000000010ab0fc54 libdispatch.dylib`__DISPATCH_WAIT_FOR_QUEUE__ + 384
    frame #4: 0x000000010ab0f594 libdispatch.dylib`_dispatch_sync_f_slow + 180
    frame #5: 0x000000010244dc04 Wrino`read(block=0x00000001031b5dc8 Wrino`partial apply forwarder for closure #1 () -> () in FluentKit.Model.save(_: Swift.String, isNew: Swift.Bool, exists: Swift.Bool) async throws -> () at ) at Helpers.swift:873:20
    frame #6: 0x00000001031a80dc Wrino`Model.save(src="addStory", isNew=false, exists=false, self=0x000000013bd96cc0) at DbCo.swift:38:9
    frame #7: 0x000000010351ab34 Wrino`closure #2 in StoryRepo.upsertLocalStory(story=0x000000013bd96cc0, completion=0x000000010354ee38 Wrino`partial apply forwarder for closure #1 () -> () in Wrino.StoryRepo.upserLocalStorysInSequence(_: Swift.Array, action: Swift.Optional<(Wrino.Story) -> ()>, curIdx: Swift.Int, completion: Swift.Optional<() -> ()>) -> () at ) at StoryRepo.swift:266
    frame #8: 0x000000010351b528 Wrino`partial apply for closure #2 in StoryRepo.upsertLocalStory(_:completion:) at :0
    frame #9: 0x0000000102050de8 Wrino`thunk for @escaping @callee_guaranteed @Sendable @async () -> (@out A) at :0
    frame #10: 0x00000001020510c8 Wrino`partial apply for thunk for @escaping @callee_guaranteed @Sendable @async () -> (@out A) at :0
  thread #45, queue = 'com.apple.root.user-initiated-qos.cooperative'
    frame #0: 0x00000001e68dd5e0 libsystem_kernel.dylib`__ulock_wait + 8
    frame #1: 0x000000010aafebdc libdispatch.dylib`_dlock_wait + 56
    frame #2: 0x000000010aafe990 libdispatch.dylib`_dispatch_thread_event_wait_slow + 56
    frame #3: 0x000000010ab0fc54 libdispatch.dylib`__DISPATCH_WAIT_FOR_QUEUE__ + 384
    frame #4: 0x000000010ab0f594 libdispatch.dylib`_dispatch_sync_f_slow + 180
    frame #5: 0x000000010244dc04 Wrino`read(block=0x00000001031b5dc8 Wrino`partial apply forwarder for closure #1 () -> () in FluentKit.Model.save(_: Swift.String, isNew: Swift.Bool, exists: Swift.Bool) async throws -> () at ) at Helpers.swift:873:20
    frame #6: 0x00000001031a80dc Wrino`Model.save(src="addStory", isNew=false, exists=false, self=0x000000013bdd68c0) at DbCo.swift:38:9
    frame #7: 0x000000010351ab34 Wrino`closure #2 in StoryRepo.upsertLocalStory(story=0x000000013bdd68c0, completion=0x000000010354ee38 Wrino`partial apply forwarder for closure #1 () -> () in Wrino.StoryRepo.upserLocalStorysInSequence(_: Swift.Array, action: Swift.Optional<(Wrino.Story) -> ()>, curIdx: Swift.Int, completion: Swift.Optional<() -> ()>) -> () at ) at StoryRepo.swift:266
    frame #8: 0x000000010351b528 Wrino`partial apply for closure #2 in StoryRepo.upsertLocalStory(_:completion:) at :0
    frame #9: 0x0000000102050de8 Wrino`thunk for @escaping @callee_guaranteed @Sendable @async () -> (@out A) at :0
    frame #10: 0x00000001020510c8 Wrino`partial apply for thunk for @escaping @callee_guaranteed @Sendable @async () -> (@out A) at :0
  thread #48, queue = 'com.apple.root.user-initiated-qos.cooperative'
    frame #0: 0x00000001e68dd5e0 libsystem_kernel.dylib`__ulock_wait + 8
    frame #1: 0x000000010aafebdc libdispatch.dylib`_dlock_wait + 56
    frame #2: 0x000000010aafe990 libdispatch.dylib`_dispatch_thread_event_wait_slow + 56
    frame #3: 0x000000010ab0fc54 libdispatch.dylib`__DISPATCH_WAIT_FOR_QUEUE__ + 384
    frame #4: 0x000000010ab0f594 libdispatch.dylib`_dispatch_sync_f_slow + 180
    frame #5: 0x000000010244dc04 Wrino`read(block=0x00000001031b5dc8 Wrino`partial apply forwarder for closure #1 () -> () in FluentKit.Model.save(_: Swift.String, isNew: Swift.Bool, exists: Swift.Bool) async throws -> () at ) at Helpers.swift:873:20
    frame #6: 0x00000001031a80dc Wrino`Model.save(src="addStory", isNew=false, exists=false, self=0x000000013bdb88c0) at DbCo.swift:38:9
    frame #7: 0x000000010351ab34 Wrino`closure #2 in StoryRepo.upsertLocalStory(story=0x000000013bdb88c0, completion=0x000000010354ee38 Wrino`partial apply forwarder for closure #1 () -> () in Wrino.StoryRepo.upserLocalStorysInSequence(_: Swift.Array, action: Swift.Optional<(Wrino.Story) -> ()>, curIdx: Swift.Int, completion: Swift.Optional<() -> ()>) -> () at ) at StoryRepo.swift:266
    frame #8: 0x000000010351b528 Wrino`partial apply for closure #2 in StoryRepo.upsertLocalStory(_:completion:) at :0
    frame #9: 0x0000000102050de8 Wrino`thunk for @escaping @callee_guaranteed @Sendable @async () -> (@out A) at :0
    frame #10: 0x00000001020510c8 Wrino`partial apply for thunk for @escaping @callee_guaranteed @Sendable @async () -> (@out A) at :0
  thread #60
    frame #0: 0x00000001f6ff9b90 libsystem_pthread.dylib`start_wqthread
  thread #61
    frame #0: 0x00000001f6ff9b90 libsystem_pthread.dylib`start_wqthread
  thread #62, name = 'com.apple.SwiftUI.AsyncRenderer'
    frame #0: 0x00000001e68dcaa8 libsystem_kernel.dylib`mach_msg2_trap + 8
    frame #1: 0x00000001e68eefc4 libsystem_kernel.dylib`mach_msg2_internal + 80
    frame #2: 0x00000001e68ef204 libsystem_kernel.dylib`mach_msg_overwrite + 388
    frame #3: 0x00000001e68dcfec libsystem_kernel.dylib`mach_msg + 24
    frame #4: 0x00000001a8fe2ad4 CoreFoundation`__CFRunLoopServiceMachPort + 160
    frame #5: 0x00000001a8fe3d18 CoreFoundation`__CFRunLoopRun + 1232
    frame #6: 0x00000001a8fe8ec0 CoreFoundation`CFRunLoopRunSpecific + 612
    frame #7: 0x00000001a33270d4 Foundation`-[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 212
    frame #8: 0x00000001a3326f68 Foundation`-[NSRunLoop(NSRunLoop) run] + 64
    frame #9: 0x00000001ac9d057c SwiftUI`___lldb_unnamed_symbol64973 + 800
    frame #10: 0x00000001ac9ce6dc SwiftUI`___lldb_unnamed_symbol64924 + 88
    frame #11: 0x00000001a33405a8 Foundation`__NSThread__start__ + 716
    frame #12: 0x00000001f6ffa6cc libsystem_pthread.dylib`_pthread_start + 148
  thread #63
    frame #0: 0x00000001f6ff9b90 libsystem_pthread.dylib`start_wqthread
(lldb) </a>

Here is my backtrace @eskimo, thanks for taking a look.

(lldb) thread backtrace all 
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
  * frame #0: 0x00000001fafb6aa8 libsystem_kernel.dylib`mach_msg2_trap + 8
    frame #1: 0x00000001fafc8fc4 libsystem_kernel.dylib`mach_msg2_internal + 80
    frame #2: 0x00000001fafc9204 libsystem_kernel.dylib`mach_msg_overwrite + 388
    frame #3: 0x00000001fafb6fec libsystem_kernel.dylib`mach_msg + 24
    frame #4: 0x00000001bdf6ead4 CoreFoundation`__CFRunLoopServiceMachPort + 160
    frame #5: 0x00000001bdf6fd18 CoreFoundation`__CFRunLoopRun + 1232
    frame #6: 0x00000001bdf74ec0 CoreFoundation`CFRunLoopRunSpecific + 612
    frame #7: 0x00000001f771f368 GraphicsServices`GSEventRunModal + 164
    frame #8: 0x00000001c046a86c UIKitCore`-[UIApplication _run] + 888
    frame #9: 0x00000001c046a4d0 UIKitCore`UIApplicationMain + 340
    frame #10: 0x000000010298d3a8 VinylFetish`main at AppDelegate.swift:21:7
    frame #11: 0x00000001dc786960 dyld`start + 2528
  thread #2, queue = 'com.apple.root.user-initiated-qos.cooperative'
    frame #0: 0x00000001fafb75e0 libsystem_kernel.dylib`__ulock_wait + 8
    frame #1: 0x0000000104772bdc libdispatch.dylib`_dlock_wait + 56
    frame #2: 0x0000000104772990 libdispatch.dylib`_dispatch_thread_event_wait_slow + 56
    frame #3: 0x0000000104783c54 libdispatch.dylib`__DISPATCH_WAIT_FOR_QUEUE__ + 384
    frame #4: 0x0000000104783594 libdispatch.dylib`_dispatch_sync_f_slow + 180
    frame #5: 0x00000001e17de940 MusicLibrary`-[ML3ArtworkConfiguration supportedSizesForMediaType:artworkType:] + 248
    frame #6: 0x00000001ce0be4ec MediaPlayer`-[MPArtworkConfiguration supportedSizesForMediaType:artworkType:] + 68
    frame #7: 0x00000001cdffc290 MediaPlayer`-[MPMediaLibraryArtwork validSizes] + 120
    frame #8: 0x00000001ce094814 MediaPlayer`-[MPMediaLibraryArtworkDataSource _existingRepresentationForArtworkCatalog:fromCacheOnly:] + 208
    frame #9: 0x00000001ce0949c0 MediaPlayer`-[MPMediaLibraryArtworkDataSource existingRepresentationForArtworkCatalog:] + 48
    frame #10: 0x00000001cdf32c50 MediaPlayer`-[MPArtworkCatalog bestImageFromDisk] + 40
    frame #11: 0x00000001cdf866a8 MediaPlayer`__70-[MPConcreteMediaItemArtwork initWithArtworkCatalog:allowsNetworking:]_block_invoke + 296
    frame #12: 0x00000001028cfd28 VinylFetish`@nonobjc MPMediaItemArtwork.image(at:) at :0
    frame #13: 0x00000001028cfcd4 VinylFetish`protocol witness for MediaArtwork.image(at:) in conformance MPMediaItemArtwork at :0
    frame #14: 0x000000010298f1bc VinylFetish`MKHelper.fetchArtwork(item=0x0000000281d16d00, imageSize=80, self=VinylFetish.MKHelper @ scalar) at MKHelper.swift:166:43
    frame #15: 0x0000000102773d18 VinylFetish`closure #1 in AlbumCell.updateFromItem(self=0x00000001241f3a00, item=0x0000000281d16d00) at AlbumCell.swift:154
    frame #16: 0x0000000102775a54 VinylFetish`partial apply for closure #1 in AlbumCell.updateFromItem() at :0
    frame #17: 0x000000010263aeac VinylFetish`thunk for @escaping @callee_guaranteed @Sendable @async () -> (@out A) at :0
    frame #18: 0x000000010263affc VinylFetish`partial apply for thunk for @escaping @callee_guaranteed @Sendable @async () -> (@out A) at :0
  thread #5, name = 'com.apple.uikit.eventfetch-thread'
    frame #0: 0x00000001fafb6aa8 libsystem_kernel.dylib`mach_msg2_trap + 8
    frame #1: 0x00000001fafc8fc4 libsystem_kernel.dylib`mach_msg2_internal + 80
    frame #2: 0x00000001fafc9204 libsystem_kernel.dylib`mach_msg_overwrite + 388
    frame #3: 0x00000001fafb6fec libsystem_kernel.dylib`mach_msg + 24
    frame #4: 0x00000001bdf6ead4 CoreFoundation`__CFRunLoopServiceMachPort + 160
    frame #5: 0x00000001bdf6fd18 CoreFoundation`__CFRunLoopRun + 1232
    frame #6: 0x00000001bdf74ec0 CoreFoundation`CFRunLoopRunSpecific + 612
    frame #7: 0x00000001b83330d4 Foundation`-[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 212
    frame #8: 0x00000001b8332fbc Foundation`-[NSRunLoop(NSRunLoop) runUntilDate:] + 64
    frame #9: 0x00000001c059f72c UIKitCore`-[UIEventFetcher threadMain] + 436
    frame #10: 0x00000001b834c5a8 Foundation`__NSThread__start__ + 716
    frame #11: 0x000000020b6126cc libsystem_pthread.dylib`_pthread_start + 148
  thread #10, name = 'com.apple.CFSocket.private'
    frame #0: 0x00000001fafb760c libsystem_kernel.dylib`__select + 8
    frame #1: 0x00000001bdfbf6a4 CoreFoundation`__CFSocketManager + 636
    frame #2: 0x000000020b6126cc libsystem_pthread.dylib`_pthread_start + 148
  thread #11, queue = 'com.apple.root.user-initiated-qos.cooperative'
    frame #0: 0x00000001fafb75e0 libsystem_kernel.dylib`__ulock_wait + 8
    frame #1: 0x0000000104772bdc libdispatch.dylib`_dlock_wait + 56
    frame #2: 0x0000000104772990 libdispatch.dylib`_dispatch_thread_event_wait_slow + 56
    frame #3: 0x0000000104783c54 libdispatch.dylib`__DISPATCH_WAIT_FOR_QUEUE__ + 384
    frame #4: 0x0000000104783594 libdispatch.dylib`_dispatch_sync_f_slow + 180
    frame #5: 0x00000001e17de940 MusicLibrary`-[ML3ArtworkConfiguration supportedSizesForMediaType:artworkType:] + 248
    frame #6: 0x00000001ce0be4ec MediaPlayer`-[MPArtworkConfiguration supportedSizesForMediaType:artworkType:] + 68
    frame #7: 0x00000001cdffc290 MediaPlayer`-[MPMediaLibraryArtwork validSizes] + 120
    frame #8: 0x00000001ce094814 MediaPlayer`-[MPMediaLibraryArtworkDataSource _existingRepresentationForArtworkCatalog:fromCacheOnly:] + 208
    frame #9: 0x00000001ce0949c0 MediaPlayer`-[MPMediaLibraryArtworkDataSource existingRepresentationForArtworkCatalog:] + 48
    frame #10: 0x00000001cdf32c50 MediaPlayer`-[MPArtworkCatalog bestImageFromDisk] + 40
    frame #11: 0x00000001cdf866a8 MediaPlayer`__70-[MPConcreteMediaItemArtwork initWithArtworkCatalog:allowsNetworking:]_block_invoke + 296
    frame #12: 0x00000001028cfd28 VinylFetish`@nonobjc MPMediaItemArtwork.image(at:) at :0
    frame #13: 0x00000001028cfcd4 VinylFetish`protocol witness for MediaArtwork.image(at:) in conformance MPMediaItemArtwork at :0
    frame #14: 0x000000010298f1bc VinylFetish`MKHelper.fetchArtwork(item=0x0000000281d125b0, imageSize=80, self=VinylFetish.MKHelper @ scalar) at MKHelper.swift:166:43
    frame #15: 0x0000000102773d18 VinylFetish`closure #1 in AlbumCell.updateFromItem(self=0x0000000124169e00, item=0x0000000281d125b0) at AlbumCell.swift:154
    frame #16: 0x0000000102775a54 VinylFetish`partial apply for closure #1 in AlbumCell.updateFromItem() at :0
    frame #17: 0x000000010263aeac VinylFetish`thunk for @escaping @callee_guaranteed @Sendable @async () -> (@out A) at :0
    frame #18: 0x000000010263affc VinylFetish`partial apply for thunk for @escaping @callee_guaranteed @Sendable @async () -> (@out A) at :0
  thread #12, queue = 'com.apple.root.user-initiated-qos.cooperative'
    frame #0: 0x00000001fafb75e0 libsystem_kernel.dylib`__ulock_wait + 8
    frame #1: 0x0000000104772bdc libdispatch.dylib`_dlock_wait + 56
    frame #2: 0x0000000104772990 libdispatch.dylib`_dispatch_thread_event_wait_slow + 56
    frame #3: 0x0000000104783c54 libdispatch.dylib`__DISPATCH_WAIT_FOR_QUEUE__ + 384
    frame #4: 0x0000000104783594 libdispatch.dylib`_dispatch_sync_f_slow + 180
    frame #5: 0x00000001e17de940 MusicLibrary`-[ML3ArtworkConfiguration supportedSizesForMediaType:artworkType:] + 248
    frame #6: 0x00000001ce0be4ec MediaPlayer`-[MPArtworkConfiguration supportedSizesForMediaType:artworkType:] + 68
    frame #7: 0x00000001cdffc290 MediaPlayer`-[MPMediaLibraryArtwork validSizes] + 120
    frame #8: 0x00000001ce094814 MediaPlayer`-[MPMediaLibraryArtworkDataSource _existingRepresentationForArtworkCatalog:fromCacheOnly:] + 208
    frame #9: 0x00000001ce0949c0 MediaPlayer`-[MPMediaLibraryArtworkDataSource existingRepresentationForArtworkCatalog:] + 48
    frame #10: 0x00000001cdf32c50 MediaPlayer`-[MPArtworkCatalog bestImageFromDisk] + 40
    frame #11: 0x00000001cdf866a8 MediaPlayer`__70-[MPConcreteMediaItemArtwork initWithArtworkCatalog:allowsNetworking:]_block_invoke + 296
    frame #12: 0x00000001028cfd28 VinylFetish`@nonobjc MPMediaItemArtwork.image(at:) at :0
    frame #13: 0x00000001028cfcd4 VinylFetish`protocol witness for MediaArtwork.image(at:) in conformance MPMediaItemArtwork at :0
    frame #14: 0x000000010298f1bc VinylFetish`MKHelper.fetchArtwork(item=0x0000000281d15350, imageSize=80, self=VinylFetish.MKHelper @ scalar) at MKHelper.swift:166:43
    frame #15: 0x0000000102773d18 VinylFetish`closure #1 in AlbumCell.updateFromItem(self=0x00000001241da200, item=0x0000000281d15350) at AlbumCell.swift:154
    frame #16: 0x0000000102775a54 VinylFetish`partial apply for closure #1 in AlbumCell.updateFromItem() at :0
    frame #17: 0x000000010263aeac VinylFetish`thunk for @escaping @callee_guaranteed @Sendable @async () -> (@out A) at :0
    frame #18: 0x000000010263affc VinylFetish`partial apply for thunk for @escaping @callee_guaranteed @Sendable @async () -> (@out A) at :0
  thread #13, queue = 'com.apple.root.user-initiated-qos.cooperative'
    frame #0: 0x00000001fafb75e0 libsystem_kernel.dylib`__ulock_wait + 8
    frame #1: 0x0000000104772bdc libdispatch.dylib`_dlock_wait + 56
    frame #2: 0x0000000104772990 libdispatch.dylib`_dispatch_thread_event_wait_slow + 56
    frame #3: 0x0000000104783c54 libdispatch.dylib`__DISPATCH_WAIT_FOR_QUEUE__ + 384
    frame #4: 0x0000000104783594 libdispatch.dylib`_dispatch_sync_f_slow + 180
    frame #5: 0x00000001e17de940 MusicLibrary`-[ML3ArtworkConfiguration supportedSizesForMediaType:artworkType:] + 248
    frame #6: 0x00000001ce0be4ec MediaPlayer`-[MPArtworkConfiguration supportedSizesForMediaType:artworkType:] + 68
    frame #7: 0x00000001cdffc290 MediaPlayer`-[MPMediaLibraryArtwork validSizes] + 120
    frame #8: 0x00000001ce094814 MediaPlayer`-[MPMediaLibraryArtworkDataSource _existingRepresentationForArtworkCatalog:fromCacheOnly:] + 208
    frame #9: 0x00000001ce0949c0 MediaPlayer`-[MPMediaLibraryArtworkDataSource existingRepresentationForArtworkCatalog:] + 48
    frame #10: 0x00000001cdf32c50 MediaPlayer`-[MPArtworkCatalog bestImageFromDisk] + 40
    frame #11: 0x00000001cdf866a8 MediaPlayer`__70-[MPConcreteMediaItemArtwork initWithArtworkCatalog:allowsNetworking:]_block_invoke + 296
    frame #12: 0x00000001028cfd28 VinylFetish`@nonobjc MPMediaItemArtwork.image(at:) at :0
    frame #13: 0x00000001028cfcd4 VinylFetish`protocol witness for MediaArtwork.image(at:) in conformance MPMediaItemArtwork at :0
    frame #14: 0x000000010298f1bc VinylFetish`MKHelper.fetchArtwork(item=0x0000000281d167f0, imageSize=80, self=VinylFetish.MKHelper @ scalar) at MKHelper.swift:166:43
    frame #15: 0x0000000102773d18 VinylFetish`closure #1 in AlbumCell.updateFromItem(self=0x00000001241e4000, item=0x0000000281d167f0) at AlbumCell.swift:154
    frame #16: 0x0000000102775a54 VinylFetish`partial apply for closure #1 in AlbumCell.updateFromItem() at :0
    frame #17: 0x000000010263aeac VinylFetish`thunk for @escaping @callee_guaranteed @Sendable @async () -> (@out A) at :0
    frame #18: 0x000000010263affc VinylFetish`partial apply for thunk for @escaping @callee_guaranteed @Sendable @async () -> (@out A) at :0
  thread #14, queue = 'com.apple.root.user-initiated-qos.cooperative'
    frame #0: 0x00000001fafb75e0 libsystem_kernel.dylib`__ulock_wait + 8
    frame #1: 0x0000000104772bdc libdispatch.dylib`_dlock_wait + 56
    frame #2: 0x0000000104772990 libdispatch.dylib`_dispatch_thread_event_wait_slow + 56
    frame #3: 0x0000000104783c54 libdispatch.dylib`__DISPATCH_WAIT_FOR_QUEUE__ + 384
    frame #4: 0x0000000104783594 libdispatch.dylib`_dispatch_sync_f_slow + 180
    frame #5: 0x00000001e17de940 MusicLibrary`-[ML3ArtworkConfiguration supportedSizesForMediaType:artworkType:] + 248
    frame #6: 0x00000001ce0be4ec MediaPlayer`-[MPArtworkConfiguration supportedSizesForMediaType:artworkType:] + 68
    frame #7: 0x00000001cdffc290 MediaPlayer`-[MPMediaLibraryArtwork validSizes] + 120
    frame #8: 0x00000001ce094814 MediaPlayer`-[MPMediaLibraryArtworkDataSource _existingRepresentationForArtworkCatalog:fromCacheOnly:] + 208
    frame #9: 0x00000001ce0949c0 MediaPlayer`-[MPMediaLibraryArtworkDataSource existingRepresentationForArtworkCatalog:] + 48
    frame #10: 0x00000001cdf32c50 MediaPlayer`-[MPArtworkCatalog bestImageFromDisk] + 40
    frame #11: 0x00000001cdf866a8 MediaPlayer`__70-[MPConcreteMediaItemArtwork initWithArtworkCatalog:allowsNetworking:]_block_invoke + 296
    frame #12: 0x00000001028cfd28 VinylFetish`@nonobjc MPMediaItemArtwork.image(at:) at :0
    frame #13: 0x00000001028cfcd4 VinylFetish`protocol witness for MediaArtwork.image(at:) in conformance MPMediaItemArtwork at :0
    frame #14: 0x000000010298f1bc VinylFetish`MKHelper.fetchArtwork(item=0x0000000281d3f210, imageSize=80, self=VinylFetish.MKHelper @ scalar) at MKHelper.swift:166:43
    frame #15: 0x0000000102773d18 VinylFetish`closure #1 in AlbumCell.updateFromItem(self=0x000000012494f000, item=0x0000000281d3f210) at AlbumCell.swift:154
    frame #16: 0x0000000102775a54 VinylFetish`partial apply for closure #1 in AlbumCell.updateFromItem() at :0
    frame #17: 0x000000010263aeac VinylFetish`thunk for @escaping @callee_guaranteed @Sendable @async () -> (@out A) at :0
    frame #18: 0x000000010263affc VinylFetish`partial apply for thunk for @escaping @callee_guaranteed @Sendable @async () -> (@out A) at :0
  thread #15, queue = 'com.apple.root.user-initiated-qos.cooperative'
    frame #0: 0x00000001fafb75e0 libsystem_kernel.dylib`__ulock_wait + 8
    frame #1: 0x0000000104772bdc libdispatch.dylib`_dlock_wait + 56
    frame #2: 0x0000000104772990 libdispatch.dylib`_dispatch_thread_event_wait_slow + 56
    frame #3: 0x0000000104783c54 libdispatch.dylib`__DISPATCH_WAIT_FOR_QUEUE__ + 384
    frame #4: 0x0000000104783594 libdispatch.dylib`_dispatch_sync_f_slow + 180
    frame #5: 0x00000001e17de940 MusicLibrary`-[ML3ArtworkConfiguration supportedSizesForMediaType:artworkType:] + 248
    frame #6: 0x00000001ce0be4ec MediaPlayer`-[MPArtworkConfiguration supportedSizesForMediaType:artworkType:] + 68
    frame #7: 0x00000001cdffc290 MediaPlayer`-[MPMediaLibraryArtwork validSizes] + 120
    frame #8: 0x00000001ce094814 MediaPlayer`-[MPMediaLibraryArtworkDataSource _existingRepresentationForArtworkCatalog:fromCacheOnly:] + 208
    frame #9: 0x00000001ce0949c0 MediaPlayer`-[MPMediaLibraryArtworkDataSource existingRepresentationForArtworkCatalog:] + 48
    frame #10: 0x00000001cdf32c50 MediaPlayer`-[MPArtworkCatalog bestImageFromDisk] + 40
    frame #11: 0x00000001cdf866a8 MediaPlayer`__70-[MPConcreteMediaItemArtwork initWithArtworkCatalog:allowsNetworking:]_block_invoke + 296
    frame #12: 0x00000001028cfd28 VinylFetish`@nonobjc MPMediaItemArtwork.image(at:) at :0
    frame #13: 0x00000001028cfcd4 VinylFetish`protocol witness for MediaArtwork.image(at:) in conformance MPMediaItemArtwork at :0
    frame #14: 0x000000010298f1bc VinylFetish`MKHelper.fetchArtwork(item=0x0000000281ce6400, imageSize=80, self=VinylFetish.MKHelper @ scalar) at MKHelper.swift:166:43
    frame #15: 0x0000000102773d18 VinylFetish`closure #1 in AlbumCell.updateFromItem(self=0x00000001240dd000, item=0x0000000281ce6400) at AlbumCell.swift:154
    frame #16: 0x0000000102775a54 VinylFetish`partial apply for closure #1 in AlbumCell.updateFromItem() at :0
    frame #17: 0x000000010263aeac VinylFetish`thunk for @escaping @callee_guaranteed @Sendable @async () -> (@out A) at :0
    frame #18: 0x000000010263affc VinylFetish`partial apply for thunk for @escaping @callee_guaranteed @Sendable @async () -> (@out A) at :0
  thread #19, name = 'com.apple.NSURLConnectionLoader'
    frame #0: 0x00000001fafb6aa8 libsystem_kernel.dylib`mach_msg2_trap + 8
    frame #1: 0x00000001fafc8fc4 libsystem_kernel.dylib`mach_msg2_internal + 80
    frame #2: 0x00000001fafc9204 libsystem_kernel.dylib`mach_msg_overwrite + 388
    frame #3: 0x00000001fafb6fec libsystem_kernel.dylib`mach_msg + 24
    frame #4: 0x00000001bdf6ead4 CoreFoundation`__CFRunLoopServiceMachPort + 160
    frame #5: 0x00000001bdf6fd18 CoreFoundation`__CFRunLoopRun + 1232
    frame #6: 0x00000001bdf74ec0 CoreFoundation`CFRunLoopRunSpecific + 612
    frame #7: 0x00000001bf2e0078 CFNetwork`___lldb_unnamed_symbol14262 + 392
    frame #8: 0x00000001b834c5a8 Foundation`__NSThread__start__ + 716
    frame #9: 0x000000020b6126cc libsystem_pthread.dylib`_pthread_start + 148
  thread #23
    frame #0: 0x000000020b611b90 libsystem_pthread.dylib`start_wqthread
  thread #26
    frame #0: 0x000000020b618644 libsystem_pthread.dylib`_pthread_introspection_hook_callout_thread_create
    frame #1: 0x000000020b61235c libsystem_pthread.dylib`_pthread_wqthread_setup + 368
    frame #2: 0x000000020b611d0c libsystem_pthread.dylib`_pthread_wqthread + 52
(lldb) 
Task not executing at all
 
 
Q