コード例 #1
0
ファイル: ThreadPoolTest.cs プロジェクト: zhuthree/cat.net
        private static void SubTask1(object forkedTransaction)
        {
            IForkedTransaction transaction = null;

            try
            {
                transaction = (IForkedTransaction)forkedTransaction;
                transaction.Fork();
                Cat.LogEvent("SubTask1Event", "SubTask1Event");
                transaction.Status = CatConstants.SUCCESS;
            }
            finally {
                if (null != transaction)
                {
                    transaction.Complete();
                }
            }
        }
コード例 #2
0
ファイル: ThreadPoolTest.cs プロジェクト: zhuthree/cat.net
        public static void Test()
        {
            const int    N_TASKS         = 1;
            ITransaction rootTransaction = null;

            try {
                rootTransaction = Cat.NewTransaction("ThreadPoolTest", "ThreadPoolTest");
                for (int i = 0; i < N_TASKS; i++)
                {
                    IForkedTransaction forkedTransaction = Cat.NewForkedTransaction("Task", "Task" + i);
                    ThreadPool.QueueUserWorkItem(Task, forkedTransaction);
                }
                Cat.LogEvent("ThreadPoolTest", "SimpleEvent");
                rootTransaction.Status = CatConstants.SUCCESS;
            } finally {
                if (null != rootTransaction)
                {
                    rootTransaction.Complete();
                }
            }
            Thread.Sleep(10000);
        }
コード例 #3
0
ファイル: ThreadPoolTest.cs プロジェクト: zhuthree/cat.net
        private static void Task(object forkedTransaction)
        {
            IForkedTransaction transaction = null;

            try {
                transaction = (IForkedTransaction)forkedTransaction;
                transaction.Fork();
                Cat.LogEvent("TaskEvent", "TaskEvent");

                IForkedTransaction subTask1Tranasction = Cat.NewForkedTransaction("SubTask1", "SubTask1");
                ThreadPool.QueueUserWorkItem(SubTask1, subTask1Tranasction);
                IForkedTransaction subTask2Tranasction = Cat.NewForkedTransaction("SubTask2", "SubTask2");
                ThreadPool.QueueUserWorkItem(SubTask2, subTask2Tranasction);

                transaction.Status = CatConstants.SUCCESS;
            }
            finally {
                if (null != transaction)
                {
                    transaction.Complete();
                }
            }
        }
コード例 #4
0
            internal void LinkAsRunAway(DefaultMessageManager manager, IForkedTransaction transaction)
            {
                IEvent @event = new DefaultEvent(PureCatConstants.TYPE_REMOTE_CALL, "RunAway");

                @event.AddData(transaction.ForkedMessageId, $"{transaction.Type}:{transaction.Name}");
                @event.Timestamp = transaction.Timestamp;
                @event.Status = PureCatConstants.SUCCESS;
                @event.Complete();

                transaction.Standalone = true;

                manager.Add(@event);
            }
コード例 #5
0
 public void LinkAsRunAway(IForkedTransaction transaction)
 {
     Context ctx = GetContext();
     if (ctx != null)
     {
         ctx.LinkAsRunAway(this, transaction);
     }
 }