示例#1
0
    public static void ContinueTask(IntPtr task, IntPtr context, IntPtr callback, IntPtr exception)
    {
        try
        {
            Marshal.WriteIntPtr(exception, IntPtr.Zero);

            DebugMessage("CoreCLREmbedding::ContinueTask (CLR) - Starting");

            GCHandle      taskHandle = GCHandle.FromIntPtr(task);
            Task <Object> actualTask = (Task <Object>)taskHandle.Target;

            TaskCompleteDelegate taskCompleteDelegate = Marshal.GetDelegateForFunctionPointer <TaskCompleteDelegate>(callback);
            DebugMessage("CoreCLREmbedding::ContinueTask (CLR) - Marshalled unmanaged callback successfully");

            actualTask.ContinueWith(TaskCompleted, new TaskState(taskCompleteDelegate, context));

            DebugMessage("CoreCLREmbedding::ContinueTask (CLR) - Finished");
        }

        catch (Exception e)
        {
            DebugMessage("CoreCLREmbedding::ContinueTask (CLR) - Exception was thrown: {0}", e.Message);

            V8Type v8Type;
            Marshal.WriteIntPtr(exception, MarshalCLRToV8(e, out v8Type));
        }
    }
示例#2
0
        //запуск задания
        public void Run()
        {
            bool readwrite;

            while (CurrentCount < countTo)
            {
                ++CurrentCount;
                --timeAmount;
                //с маленькой вероятностью запускаем операцию ввода-вывода
                readwrite = new Random().Next(1000) > 800;
                if (readwrite)
                {
                    //сообщаем планировщику, что задание было заблокировано операцией ввода-вывода
                    Timer = initialTime;
                    TaskCompleteDelegate eventReadWrite = TaskScheduler.TaskCompleteEvent;
                    eventReadWrite(this, st, "read/write");
                    //Suspend();
                    //return;
                }
                else if (CurrentCount % Quantum == 0)
                {
                    TaskCompleteDelegate eventReadWrite = TaskScheduler.TaskCompleteEvent;
                    eventReadWrite(this, st, "stopped");
                }
            }
            //сообщаем планировщику, что задание завершено
            TaskCompleteDelegate eventTaskComlete = TaskScheduler.TaskCompleteEvent;

            eventTaskComlete(this, st, "finished");
            //Suspend();
        }
示例#3
0
 public TaskState(TaskCompleteDelegate callback, IntPtr context)
 {
     Callback = callback;
     Context = context;
 }
示例#4
0
 public TaskState(TaskCompleteDelegate callback, IntPtr context)
 {
     Callback = callback;
     Context  = context;
 }