2 // CommittableTransaction.cs
5 // Atsushi Enomoto <atsushi@ximian.com>
6 // Ankit Jain <JAnkit@novell.com>
12 using System.Runtime.Serialization;
13 using System.Threading;
15 namespace System.Transactions
18 public sealed class CommittableTransaction : Transaction,
19 ISerializable, IDisposable, System.IAsyncResult
21 TransactionOptions options;
23 AsyncCallback callback;
24 object user_defined_state;
26 IAsyncResult asyncResult;
28 public CommittableTransaction ()
29 : this (new TransactionOptions ())
33 public CommittableTransaction (TimeSpan timeout)
35 options = new TransactionOptions ();
36 options.Timeout = timeout;
39 public CommittableTransaction (TransactionOptions options)
41 this.options = options;
44 public IAsyncResult BeginCommit (AsyncCallback callback,
45 object user_defined_state)
47 this.callback = callback;
48 this.user_defined_state = user_defined_state;
50 AsyncCallback cb = null;
52 cb = new AsyncCallback (CommitCallback);
54 asyncResult = BeginCommitInternal (cb);
58 public void EndCommit (IAsyncResult ar)
61 throw new ArgumentException ("The IAsyncResult parameter must be the same parameter as returned by BeginCommit.", "asyncResult");
63 EndCommitInternal (asyncResult);
66 private void CommitCallback (IAsyncResult ar)
68 if (asyncResult == null && ar.CompletedSynchronously)
78 [MonoTODO ("Not implemented")]
79 void ISerializable.GetObjectData (SerializationInfo info,
80 StreamingContext context)
82 throw new NotImplementedException ();
85 object IAsyncResult.AsyncState {
86 get { return user_defined_state; }
89 WaitHandle IAsyncResult.AsyncWaitHandle {
90 get { return asyncResult.AsyncWaitHandle; }
93 bool IAsyncResult.CompletedSynchronously {
94 get { return asyncResult.CompletedSynchronously; }
97 bool IAsyncResult.IsCompleted {
98 get { return asyncResult.IsCompleted; }