a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
56 lines
1.5 KiB
C#
56 lines
1.5 KiB
C#
namespace System.Web.Mvc.Async {
|
|
using System;
|
|
using System.Threading;
|
|
|
|
internal sealed class SimpleAsyncResult : IAsyncResult {
|
|
|
|
private readonly object _asyncState;
|
|
private bool _completedSynchronously;
|
|
private volatile bool _isCompleted;
|
|
|
|
public SimpleAsyncResult(object asyncState) {
|
|
_asyncState = asyncState;
|
|
}
|
|
|
|
public object AsyncState {
|
|
get {
|
|
return _asyncState;
|
|
}
|
|
}
|
|
|
|
// ASP.NET IAsyncResult objects should never expose a WaitHandle due to potential deadlocking
|
|
public WaitHandle AsyncWaitHandle {
|
|
get {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public bool CompletedSynchronously {
|
|
get {
|
|
return _completedSynchronously;
|
|
}
|
|
}
|
|
|
|
public bool IsCompleted {
|
|
get {
|
|
return _isCompleted;
|
|
}
|
|
}
|
|
|
|
// Proper order of execution:
|
|
// 1. Set the CompletedSynchronously property to the correct value
|
|
// 2. Set the IsCompleted flag
|
|
// 3. Execute the callback
|
|
// 4. Signal the WaitHandle (which we don't have)
|
|
public void MarkCompleted(bool completedSynchronously, AsyncCallback callback) {
|
|
_completedSynchronously = completedSynchronously;
|
|
_isCompleted = true;
|
|
|
|
if (callback != null) {
|
|
callback(this);
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|