comparison Implab.Test/AsyncTests.cs @ 149:eb793fbbe4ea v2

fixed promises cancellation
author cin
date Wed, 06 May 2015 17:11:27 +0300
parents 706fccb85524
children ec91a6dfa5b3
comparison
equal deleted inserted replaced
148:e6d4b41f0101 149:eb793fbbe4ea
744 744
745 [TestMethod] 745 [TestMethod]
746 public void ChainedCancel2Test() { 746 public void ChainedCancel2Test() {
747 // при отмене цепочки обещаний, вложенные операции также должны отменяться 747 // при отмене цепочки обещаний, вложенные операции также должны отменяться
748 var pSurvive = new Promise<bool>(); 748 var pSurvive = new Promise<bool>();
749 var hemStarted = new ManualResetEvent(false); 749 var hemStarted = new Signal();
750 var p = PromiseHelper 750 var p = PromiseHelper
751 .Sleep(1, "Hi, HAL!") 751 .Sleep(1, "Hi, HAL!")
752 .Chain(x => { 752 .Chain(() => {
753 hemStarted.Set(); 753 hemStarted.Set();
754 // запускаем две асинхронные операции 754 // запускаем две асинхронные операции
755 var result = PromiseHelper 755 var result = PromiseHelper
756 .Sleep(100000000, "HEM ENABLED!!!") 756 .Sleep(2000, "HEM ENABLED!!!")
757 .Then(s => { 757 .Then(() => pSurvive.Resolve(false));
758 pSurvive.Resolve(false);
759 return s;
760 });
761 758
762 result 759 result
763 .On(() => pSurvive.Resolve(true), PromiseEventType.Cancelled); 760 .On(() => pSurvive.Resolve(true), PromiseEventType.Cancelled);
764 761
765 return result; 762 return result;
766 }); 763 });
767 764
768 hemStarted.WaitOne(); 765 hemStarted.Wait();
769 p.Cancel(); 766 p.Cancel();
770 767
771 try { 768 try {
772 p.Join(); 769 p.Join();
770 Assert.Fail();
773 } catch (OperationCanceledException) { 771 } catch (OperationCanceledException) {
774 Assert.IsTrue(pSurvive.Join()); 772 }
775 } 773 Assert.IsTrue(pSurvive.Join());
776 } 774 }
777 775
778 [TestMethod] 776 [TestMethod]
779 public void SharedLockTest() { 777 public void SharedLockTest() {
780 var l = new SharedLock(); 778 var l = new SharedLock();