Example #1
0
        public void Cancel()
        {
            if (CancellTokenSource != null)
            {
                lock (CancellTokenSource)
                {
                    if (!CancellTokenSource.IsCancellationRequested)// && RecvTask != null
                    {
                        CancellTokenSource.Cancel();
                    }
                    CancellTokenSource.Dispose();
                    CancellTokenSource = null;
                }
            }

            // TODO:時間がないので配列を一旦コピーしてデッドロックが発生しないようにしておく
            SendMessageWork[] worklist;
            lock (SendList)
            {
                worklist = new SendMessageWork[SendList.Count];
                SendList.CopyTo(worklist);
            }
            foreach (var work in worklist)
            {
                work.Cancel();
            }
        }
Example #2
0
        SendMessageWork SendMessage(byte[] header, byte[] body)
        {
            if (!IsActive)
            {
                Console.WriteLine("Failed SendMessage inactive");
                return(null);
            }
            SendMessageWork sendWork = new SendMessageWork(Stream, header, body, (work) =>
            {
                lock (SendList)
                {
                    SendList.Remove(work);
                }
            });

            lock (SendList)
            {
                SendList.Add(sendWork);
            }
            return(sendWork);
        }