GrDirectContext is not thread safe so you cannot use one or any classes created from one on simultaneous on different threads. There are a few options here to achieve what you're looking to do however.
1) Make two different GrDirectContexts on each thread. Manage any created texture by using GrBackendTextures (either importing or exporting them). They will eventually need to be deleted on the same GrDirectContext in which they were made. However, they then should be able to be created on one GrDirectContext and then read on a different one. Now you will need to make sure that uses of these on the different threads are manually synchronized. This can be done heavy handed using CPU synchronization or by using GPU semaphores which will need to be exported from the create Context and imported into the Read context.
2) You can try to use the SkImages::CrossContextTextureFromPixmap API. This sort of wraps up and manages what I described in 1) for you. However, it is much more limited on what it can do, is more fragile, and not as heavily tested. But if it works it is probably easier.
3) Skia's new GPU backend, Graphite, does support this type of multithreaded work, by using Recorders on different threads. There isn't a dedicated D3D backend for Graphite however there is a Dawn backend (Chrome's WebGPU implementation) that does have a D3D11/12 backend. We haven't fully shipped anything using either of these Dawn backends yet, so there could still be some bugs in them, but they also may just fully work for your use cases.
Thanks
Greg