Exemplo n.º 1
0
        private static Action OutputWaitEtwEvents(Task task, Action continuation)
        {
            if (Task.s_asyncDebuggingEnabled)
            {
                Task.AddToActiveTasks(task);
            }
            TplEtwProvider etwLog = TplEtwProvider.Log;

            if (etwLog.IsEnabled())
            {
                Task internalCurrent  = Task.InternalCurrent;
                Task continuationTask = AsyncMethodBuilderCore.TryGetContinuationTask(continuation);
                etwLog.TaskWaitBegin(internalCurrent != null ? internalCurrent.m_taskScheduler.Id : TaskScheduler.Default.Id, internalCurrent != null ? internalCurrent.Id : 0, task.Id, TplEtwProvider.TaskWaitBehavior.Asynchronous, continuationTask != null ? continuationTask.Id : 0, Thread.GetDomainID());
            }
            return(AsyncMethodBuilderCore.CreateContinuationWrapper(continuation, (Action)(() =>
            {
                if (Task.s_asyncDebuggingEnabled)
                {
                    Task.RemoveFromActiveTasks(task.Id);
                }
                Guid oldActivityThatWillContinue = new Guid();
                int num = etwLog.IsEnabled() ? 1 : 0;
                if (num != 0)
                {
                    Task internalCurrent = Task.InternalCurrent;
                    etwLog.TaskWaitEnd(internalCurrent != null ? internalCurrent.m_taskScheduler.Id : TaskScheduler.Default.Id, internalCurrent != null ? internalCurrent.Id : 0, task.Id);
                    if (etwLog.TasksSetActivityIds && (task.Options & (TaskCreationOptions)1024) != TaskCreationOptions.None)
                    {
                        EventSource.SetCurrentThreadActivityId(TplEtwProvider.CreateGuidForTaskID(task.Id), out oldActivityThatWillContinue);
                    }
                }
                continuation();
                if (num == 0)
                {
                    return;
                }
                etwLog.TaskWaitContinuationComplete(task.Id);
                if (!etwLog.TasksSetActivityIds || (task.Options & (TaskCreationOptions)1024) == TaskCreationOptions.None)
                {
                    return;
                }
                EventSource.SetCurrentThreadActivityId(oldActivityThatWillContinue);
            }), (Task)null));
        }
Exemplo n.º 2
0
        // Token: 0x06005D28 RID: 23848 RVA: 0x00146878 File Offset: 0x00144A78
        private static Action OutputWaitEtwEvents(Task task, Action continuation)
        {
            if (Task.s_asyncDebuggingEnabled)
            {
                Task.AddToActiveTasks(task);
            }
            TplEtwProvider etwLog = TplEtwProvider.Log;

            if (etwLog.IsEnabled())
            {
                Task internalCurrent = Task.InternalCurrent;
                Task task2           = AsyncMethodBuilderCore.TryGetContinuationTask(continuation);
                etwLog.TaskWaitBegin((internalCurrent != null) ? internalCurrent.m_taskScheduler.Id : TaskScheduler.Default.Id, (internalCurrent != null) ? internalCurrent.Id : 0, task.Id, TplEtwProvider.TaskWaitBehavior.Asynchronous, (task2 != null) ? task2.Id : 0, Thread.GetDomainID());
            }
            return(AsyncMethodBuilderCore.CreateContinuationWrapper(continuation, delegate
            {
                if (Task.s_asyncDebuggingEnabled)
                {
                    Task.RemoveFromActiveTasks(task.Id);
                }
                Guid currentThreadActivityId = default(Guid);
                bool flag = etwLog.IsEnabled();
                if (flag)
                {
                    Task internalCurrent2 = Task.InternalCurrent;
                    etwLog.TaskWaitEnd((internalCurrent2 != null) ? internalCurrent2.m_taskScheduler.Id : TaskScheduler.Default.Id, (internalCurrent2 != null) ? internalCurrent2.Id : 0, task.Id);
                    if (etwLog.TasksSetActivityIds && (task.Options & (TaskCreationOptions)1024) != TaskCreationOptions.None)
                    {
                        EventSource.SetCurrentThreadActivityId(TplEtwProvider.CreateGuidForTaskID(task.Id), out currentThreadActivityId);
                    }
                }
                continuation();
                if (flag)
                {
                    etwLog.TaskWaitContinuationComplete(task.Id);
                    if (etwLog.TasksSetActivityIds && (task.Options & (TaskCreationOptions)1024) != TaskCreationOptions.None)
                    {
                        EventSource.SetCurrentThreadActivityId(currentThreadActivityId);
                    }
                }
            }, null));
        }