annotate Util/AsyncResultBase.cs @ 7:4b78cc5f116b

Fixes and improvements (some untested)
author Ivo Smits <Ivo@UCIS.nl>
date Sun, 13 Jan 2013 18:44:17 +0100
parents 2933f7750542
children a6faa87767bb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1 ???using System;
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
2 using System.Threading;
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
3 using SysThreadPool = System.Threading.ThreadPool;
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
4
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
5 namespace UCIS.Util {
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
6 public abstract class AsyncResultBase : IAsyncResult {
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
7 ManualResetEvent WaitEvent = null;
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
8 AsyncCallback Callback = null;
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
9 public object AsyncState { get; private set; }
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
10 public bool CompletedSynchronously { get; private set; }
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
11 public bool IsCompleted { get; private set; }
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
12 public Exception Error { get; private set; }
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
13 public WaitHandle AsyncWaitHandle {
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
14 get {
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
15 lock (this) {
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
16 if (WaitEvent == null) WaitEvent = new ManualResetEvent(IsCompleted);
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
17 return WaitEvent;
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
18 }
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
19 }
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
20 }
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
21
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
22 public AsyncResultBase(AsyncCallback callback, Object state) {
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
23 this.Callback = callback;
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
24 this.AsyncState = state;
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
25 }
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
26
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
27 private void CallCallback(Object state) {
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
28 if (Callback != null) Callback(this);
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
29 }
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
30
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
31 protected void SetCompleted(Boolean synchronously, Exception error) {
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
32 this.CompletedSynchronously = synchronously;
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
33 this.Error = error;
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
34 lock (this) {
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
35 IsCompleted = true;
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
36 if (WaitEvent != null) WaitEvent.Set();
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
37 }
7
4b78cc5f116b Fixes and improvements (some untested)
Ivo Smits <Ivo@UCIS.nl>
parents: 5
diff changeset
38 if (Callback != null) {
4b78cc5f116b Fixes and improvements (some untested)
Ivo Smits <Ivo@UCIS.nl>
parents: 5
diff changeset
39 if (synchronously) {
4b78cc5f116b Fixes and improvements (some untested)
Ivo Smits <Ivo@UCIS.nl>
parents: 5
diff changeset
40 Callback(this);
4b78cc5f116b Fixes and improvements (some untested)
Ivo Smits <Ivo@UCIS.nl>
parents: 5
diff changeset
41 } else {
4b78cc5f116b Fixes and improvements (some untested)
Ivo Smits <Ivo@UCIS.nl>
parents: 5
diff changeset
42 SysThreadPool.QueueUserWorkItem(CallCallback);
4b78cc5f116b Fixes and improvements (some untested)
Ivo Smits <Ivo@UCIS.nl>
parents: 5
diff changeset
43 }
4b78cc5f116b Fixes and improvements (some untested)
Ivo Smits <Ivo@UCIS.nl>
parents: 5
diff changeset
44 }
5
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
45 }
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
46
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
47 protected void ThrowError() {
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
48 if (Error != null) throw Error;
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
49 }
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
50 }
2933f7750542 Added read-buffering stream wrapper
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
51 }