コード例 #1
0
ファイル: ThenSynchronizer.cs プロジェクト: urasandesu/Enkidu
 public override async Task Begin(object obj, SynchronousOptions opts = null)
 {
     if (LeftSynchronizer is BinarySynchronizer && LeftSynchronizer.WillBegin(obj, opts))
     {
         await LeftSynchronizer.Begin(obj, opts);
     }
     else
     {
         await RightSynchronizer.Begin(obj, opts);
     }
 }
コード例 #2
0
ファイル: ThenSynchronizer.cs プロジェクト: urasandesu/Enkidu
 public override bool WillBegin(object obj, SynchronousOptions opts = null)
 {
     if (LeftSynchronizer is BinarySynchronizer && LeftSynchronizer.WillBegin(obj, opts))
     {
         return(true);
     }
     else
     {
         return(RightSynchronizer.WillBegin(obj, opts));
     }
 }
コード例 #3
0
        protected virtual void Dispose(bool disposing)
        {
            if (!m_disposed)
            {
                if (disposing)
                {
                    LeftSynchronizer.Dispose();
                    RightSynchronizer.Dispose();
                }

                m_disposed = true;
            }
        }
コード例 #4
0
ファイル: ThenSynchronizer.cs プロジェクト: urasandesu/Enkidu
        public override async Task End(object obj, SynchronousOptions opts = null)
        {
            var willLeftBegin  = LeftSynchronizer.WillBegin(obj);
            var willRightBegin = RightSynchronizer.WillBegin(obj);

            if (willLeftBegin && willRightBegin)
            {
                await Task.CompletedTask;
            }
            else if (willLeftBegin)
            {
                await RightSynchronizer.End(obj, SynchronousOptions.UpdateInternalOptions(opts, new InternalSynchronousOptions().WithHandlingCondition()));
            }
            else if (willRightBegin)
            {
                await LeftSynchronizer.End(obj, SynchronousOptions.UpdateInternalOptions(opts, new InternalSynchronousOptions().WithHandlingCondition()));
            }
            else
            {
                await LeftSynchronizer.End(obj, opts);
            }
        }
コード例 #5
0
ファイル: ThenSynchronizer.cs プロジェクト: urasandesu/Enkidu
        public override bool WillEnd(object obj, SynchronousOptions opts = null)
        {
            var willLeftBegin  = LeftSynchronizer.WillBegin(obj);
            var willRightBegin = RightSynchronizer.WillBegin(obj);

            if (willLeftBegin && willRightBegin)
            {
                return(false);
            }
            else if (willLeftBegin)
            {
                return(RightSynchronizer.WillEnd(obj, SynchronousOptions.UpdateInternalOptions(opts, new InternalSynchronousOptions().WithHandlingCondition())));
            }
            else if (willRightBegin)
            {
                return(LeftSynchronizer.WillEnd(obj, SynchronousOptions.UpdateInternalOptions(opts, new InternalSynchronousOptions().WithHandlingCondition())));
            }
            else
            {
                return(LeftSynchronizer.WillEnd(obj, opts));
            }
        }
コード例 #6
0
 public override Task NotifyAll(bool state)
 {
     return(Task.WhenAll(LeftSynchronizer.NotifyAll(state), RightSynchronizer.NotifyAll(state)));
 }
コード例 #7
0
 public override Task End(object obj, SynchronousOptions opts = null)
 {
     return(Task.WhenAll(LeftSynchronizer.End(obj, opts), RightSynchronizer.End(obj, opts)));
 }
コード例 #8
0
 public override bool WillEnd(object obj, SynchronousOptions opts = null)
 {
     return(LeftSynchronizer.WillEnd(obj, opts) && RightSynchronizer.WillEnd(obj, opts));
 }
コード例 #9
0
ファイル: OrSynchronizer.cs プロジェクト: urasandesu/Enkidu
 public override Task Begin(object obj, SynchronousOptions opts = null)
 {
     return(Task.WhenAny(LeftSynchronizer.Begin(obj, opts), RightSynchronizer.Begin(obj, opts)));
 }
コード例 #10
0
ファイル: ThenSynchronizer.cs プロジェクト: urasandesu/Enkidu
        public override async Task NotifyAll(bool state)
        {
            await LeftSynchronizer.NotifyAll(state);

            await RightSynchronizer.NotifyAll(state);
        }