C# Thread scheduling changes after restarting resource

It appears that there seems to be some sort of thread scheduling change after restarting a resource.
Before restarting my resource, it will run all the way through everytime on the game thread.
However, after restarting the resource, the thread will become a ThreadPoolThread after the first call on an await.
After it switches too a ThreadPoolThread I get an No current resource manager error on the next call to an exported method.
I have tried this over 20 times too ensure that restarting the resource is causing this issue.
I have also tried awaiting the BaseScript.Delay too try and get back on the game thread, but it remains on the ThreadPoolThread.
I can run the method 50 times and it works fine but as soon as the resource gets restarted the thread scheduling changes.

I have posted a screenshot below of the issue, as well as a small snippet of code too show the exported functions being called.
In the screenshot, you can see that the first time all 3 checks come back False on if the thread is a ThreadPoolThread.
After restarting the resource “sessions”, you can see that ThreadPoolThread becomes True after the first check.

I am completely aware that this issue is due too not being on the game thread. My question is not why I am getting this error.
My question is, why after restarting a resource, does the scheduling behaviour change.
Even when awaiting on BaseScript.Delay it is stuck on this ThreadPoolThread and won’t switch back to the game thread.
Too be clear, this issue is only happening after restarting the resource.

Output: https://gyazo.com/618a19ed92dcc5b97eb16d2f3d8330be

using CitizenFX.Core;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Threading;

namespace Server.Events
{
    public class PlayerConnecting : BaseScript
    {
        public PlayerConnecting()
        {
            
            EventHandlers["playerConnecting"] += new Action<Player, string, CallbackDelegate, IDictionary<string, object>>(PlayerConnectingEvent);

            Exports.Add("Test", new Func<Task>(async () => await Delay(0)));
        }

        private async void PlayerConnectingEvent([FromSource] Player player, string name, CallbackDelegate kickReason, IDictionary<string, object> deferrals)
        {
            Debug.WriteLine("IS THREADPOOLTHREAD1: " + Thread.CurrentThread.IsThreadPoolThread);
            await Exports["sessions"].Test();

            Debug.WriteLine("IS THREADPOOLTHREAD2: " + Thread.CurrentThread.IsThreadPoolThread);
            await Exports["sessions"].Test();

            Debug.WriteLine("IS THREADPOOLTHREAD3: " + Thread.CurrentThread.IsThreadPoolThread);
        }
    }
}