You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
1.6 KiB
79 lines
1.6 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Threading;
|
|
|
|
namespace Apewer.Web
|
|
{
|
|
|
|
internal sealed class MiniStreamAsyncResult : IAsyncResult
|
|
{
|
|
|
|
object locker = new object();
|
|
ManualResetEvent handle;
|
|
bool completed;
|
|
|
|
internal byte[] Buffer = null;
|
|
internal int Offset = 0;
|
|
internal int Count = 0;
|
|
internal AsyncCallback Callback = null;
|
|
internal object State = null;
|
|
internal int SynchRead = 0;
|
|
internal Exception Error = null;
|
|
|
|
public void Complete(Exception e)
|
|
{
|
|
Error = e;
|
|
Complete();
|
|
}
|
|
|
|
public void Complete()
|
|
{
|
|
lock (locker)
|
|
{
|
|
if (completed) return;
|
|
|
|
completed = true;
|
|
if (handle != null) handle.Set();
|
|
|
|
if (Callback != null) Callback.BeginInvoke(this, null, null);
|
|
}
|
|
}
|
|
|
|
public object AsyncState
|
|
{
|
|
get { return State; }
|
|
}
|
|
|
|
public WaitHandle AsyncWaitHandle
|
|
{
|
|
get
|
|
{
|
|
lock (locker)
|
|
{
|
|
if (handle == null) handle = new ManualResetEvent(completed);
|
|
}
|
|
|
|
return handle;
|
|
}
|
|
}
|
|
|
|
public bool CompletedSynchronously
|
|
{
|
|
get { return (SynchRead == Count); }
|
|
}
|
|
|
|
public bool IsCompleted
|
|
{
|
|
get
|
|
{
|
|
lock (locker)
|
|
{
|
|
return completed;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
}
|