Xamarin Public Jenkins (auto-signing) e79aa3c0ed Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
2016-08-03 10:59:49 +00:00

63 lines
1.7 KiB
C#

//-----------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
namespace System.Activities
{
using System.Xml;
using System.Collections.Generic;
using System.Threading;
using System.Runtime;
class AsyncInvokeOperation
{
object thisLock;
public AsyncInvokeOperation(SynchronizationContext syncContext)
{
Fx.Assert(syncContext != null, "syncContext cannot be null");
this.SyncContext = syncContext;
thisLock = new object();
}
SynchronizationContext SyncContext
{
get;
set;
}
bool Completed
{
get;
set;
}
public void OperationStarted()
{
this.SyncContext.OperationStarted();
}
public void OperationCompleted()
{
lock (thisLock)
{
Fx.AssertAndThrowFatal(!this.Completed, "Async operation has already been completed");
this.Completed = true;
}
this.SyncContext.OperationCompleted();
}
public void PostOperationCompleted(SendOrPostCallback callback, object arg)
{
lock (thisLock)
{
Fx.AssertAndThrowFatal(!this.Completed, "Async operation has already been completed");
this.Completed = true;
}
Fx.Assert(callback != null, "callback cannot be null");
this.SyncContext.Post(callback, arg);
this.SyncContext.OperationCompleted();
}
}
}