The only way I have found to achieve that is via reflection. The following solution is tested and it's working.
private const string s_fieldName_StateFlags = "m_stateFlags";
/// <summary> From https://referencesource.microsoft.com/#mscorlib/system/threading/Tasks/Task.cs </summary>
[Flags]
public enum TaskState
{
TASK_STATE_STARTED = 0x10000, //bin: 0000 0000 0000 0001 0000 0000 0000 0000
TASK_STATE_DELEGATE_INVOKED = 0x20000, //bin: 0000 0000 0000 0010 0000 0000 0000 0000
TASK_STATE_DISPOSED = 0x40000, //bin: 0000 0000 0000 0100 0000 0000 0000 0000
TASK_STATE_EXCEPTIONOBSERVEDBYPARENT = 0x80000, //bin: 0000 0000 0000 1000 0000 0000 0000 0000
TASK_STATE_CANCELLATIONACKNOWLEDGED = 0x100000, //bin: 0000 0000 0001 0000 0000 0000 0000 0000
TASK_STATE_FAULTED = 0x200000, //bin: 0000 0000 0010 0000 0000 0000 0000 0000
TASK_STATE_CANCELED = 0x400000, //bin: 0000 0000 0100 0000 0000 0000 0000 0000
TASK_STATE_WAITING_ON_CHILDREN = 0x800000, //bin: 0000 0000 1000 0000 0000 0000 0000 0000
TASK_STATE_RAN_TO_COMPLETION = 0x1000000, //bin: 0000 0001 0000 0000 0000 0000 0000 0000
TASK_STATE_WAITINGFORACTIVATION = 0x2000000, //bin: 0000 0010 0000 0000 0000 0000 0000 0000
TASK_STATE_COMPLETION_RESERVED = 0x4000000, //bin: 0000 0100 0000 0000 0000 0000 0000 0000
TASK_STATE_THREAD_WAS_ABORTED = 0x8000000, //bin: 0000 1000 0000 0000 0000 0000 0000 0000
TASK_STATE_WAIT_COMPLETION_NOTIFICATION = 0x10000000, //bin: 0001 0000 0000 0000 0000 0000 0000 0000
TASK_STATE_EXECUTIONCONTEXT_IS_NULL = 0x20000000, //bin: 0010 0000 0000 0000 0000 0000 0000 0000
TASK_STATE_TASKSCHEDULED_WAS_FIRED = 0x40000000, //bin: 0100 0000 0000 0000 0000 0000 0000 0000
}
public static void SetTaskRunning<TResult> (TaskCompletionSource<TResult> i_taskCompletionSource)
{
if (i_taskCompletionSource == null)
throw new ArgumentNullException (nameof (i_taskCompletionSource));
var value = TaskState.TASK_STATE_STARTED
| TaskState.TASK_STATE_DELEGATE_INVOKED;
var task = i_taskCompletionSource.Task;
var type = task.GetType ();
var fieldInfo = type.GetField (s_fieldName_StateFlags, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
fieldInfo.SetValue (task, (int)value);
}