2 // CommittableTransaction.cs
5 // Atsushi Enomoto <atsushi@ximian.com>
6 // Ankit Jain <JAnkit@novell.com>
13 using System.Runtime.Serialization;
14 using System.Threading;
16 namespace System.Transactions
19 public sealed class CommittableTransaction : Transaction,
20 ISerializable, IDisposable, System.IAsyncResult
22 TransactionOptions options;
24 AsyncCallback callback;
25 object user_defined_state;
27 IAsyncResult asyncResult;
29 public CommittableTransaction ()
30 : this (new TransactionOptions ())
34 public CommittableTransaction (TimeSpan timeout)
36 options = new TransactionOptions ();
37 options.Timeout = timeout;
40 public CommittableTransaction (TransactionOptions options)
42 this.options = options;
45 public IAsyncResult BeginCommit (AsyncCallback callback,
46 object user_defined_state)
48 this.callback = callback;
49 this.user_defined_state = user_defined_state;
51 AsyncCallback cb = null;
53 cb = new AsyncCallback (CommitCallback);
55 asyncResult = BeginCommitInternal (cb);
59 public void EndCommit (IAsyncResult ar)
62 throw new ArgumentException ("The IAsyncResult parameter must be the same parameter as returned by BeginCommit.", "asyncResult");
64 EndCommitInternal (asyncResult);
67 private void CommitCallback (IAsyncResult ar)
78 void ISerializable.GetObjectData (SerializationInfo info,
79 StreamingContext context)
81 throw new NotImplementedException ();
84 object IAsyncResult.AsyncState {
85 get { return user_defined_state; }
88 WaitHandle IAsyncResult.AsyncWaitHandle {
89 get { return asyncResult.AsyncWaitHandle; }
92 bool IAsyncResult.CompletedSynchronously {
93 get { return asyncResult.CompletedSynchronously; }
96 bool IAsyncResult.IsCompleted {
97 get { return asyncResult.IsCompleted; }