コード例 #1
0
 public void Initialise()
 {
     isBlocking      = false;
     job             = null;
     jobResult       = null;
     storedException = null;
     task            = null;
     timeout         = null;
     timeoutResult   = false;
 }
コード例 #2
0
        public object QueueWait(MainLoopJob task)
        {
            DelegateTask dTask = cache.Dequeue();

            dTask.Job = task;

            try
            {
                QueueWait(dTask);
                return(dTask.JobResult);
            }
            finally
            {
                cache.Enqueue(dTask);
            }
        }
コード例 #3
0
        public object QueueWait(MainLoopJob task)
        {
            var dTask = _cache.Dequeue();

            dTask.Job = task;

            try
            {
                QueueWait(dTask);
                return(dTask.JobResult);
            }
            finally
            {
                _cache.Enqueue(dTask);
            }
        }
コード例 #4
0
        IAsyncResult BeginCreate(MainLoopJob task, AsyncCallback callback, object asyncState)
        {
            if (asyncResult != null)
            {
                throw new InvalidOperationException("Two asynchronous operations cannot be executed simultaenously");
            }

            asyncResult = new TorrentCreatorAsyncResult(callback, asyncState);
            ThreadPool.QueueUserWorkItem(delegate {
                try {
                    asyncResult.Dictionary = (BEncodedDictionary)task();
                } catch (Exception ex) {
                    asyncResult.SavedException = ex;
                }
                asyncResult.Complete();
            });
            return(asyncResult);
        }
コード例 #5
0
        public object QueueWait(MainLoopJob task)
        {
            if (IsInCurrentThread())
            {
                return(task());
            }

            var dTask = _cache.Dequeue();

            dTask.Job = task;

            try
            {
                QueueWait(dTask);
                return(dTask.JobResult);
            }
            finally
            {
                _cache.Enqueue(dTask);
            }
        }
コード例 #6
0
 public DelegateTask(MainLoopJob task)
 {
     this.task = task;
 }
コード例 #7
0
        private IAsyncResult BeginCreate(MainLoopJob task, AsyncCallback callback, object asyncState)
        {
            if (asyncResult != null)
                throw new InvalidOperationException("Two asynchronous operations cannot be executed simultaenously");

            asyncResult = new TorrentCreatorAsyncResult(callback, asyncState);
            ThreadPool.QueueUserWorkItem(delegate
            {
                try
                {
                    asyncResult.Dictionary = (BEncodedDictionary) task();
                }
                catch (Exception ex)
                {
                    asyncResult.SavedException = ex;
                }
                asyncResult.Complete();
            });
            return asyncResult;
        }
コード例 #8
0
ファイル: DelegateTask.cs プロジェクト: dontnod/monotorrent
 public DelegateTask(MainLoopJob task)
 {
     this.task = task;
 }
コード例 #9
0
        public object QueueWait(MainLoopJob task)
        {
            DelegateTask dTask = cache.Dequeue();
            dTask.Job = task;

            try
            {
                QueueWait(dTask);
                return dTask.JobResult;
            }
            finally
            {
                cache.Enqueue(dTask);
            }
        }
コード例 #10
0
 public void Initialise()
 {
     isBlocking = false;
     job = null;
     jobResult = null;
     storedException = null;
     task = null;
     timeout = null;
     timeoutResult = false;
 }
コード例 #11
0
        public object QueueWait(MainLoopJob task)
        {
            if (IsInCurrentThread())
                return task();

            var dTask = _cache.Dequeue();
            dTask.Job = task;

            try
            {
                QueueWait(dTask);
                return dTask.JobResult;
            }
            finally
            {
                _cache.Enqueue(dTask);
            }
        }