???????????????APM??
???????????? ???????[ 2013/4/3 9:49:50 ] ????????
???????????IAsyncResult?????????API
?????????????????IAsyncResult????????????????á?
// ??ref??????????????
public delegate void RefAsyncCallback(ref string resultStr?? IAsyncResult ar);
public class CalculateAsyncResult : IAsyncResult
{
private int _calcNum1;
private int _calcNum2;
private RefAsyncCallback _userCallback;
public CalculateAsyncResult(int num1?? int num2?? RefAsyncCallback userCallback?? object asyncState)
{
this._calcNum1 = num1;
this._calcNum2 = num2;
this._userCallback = userCallback;
this._asyncState = asyncState;
// ????в???
ThreadPool.QueueUserWorkItem((obj) => { AsyncCalculate(obj); }?? this);
}
#region IAsyncResult???
private object _asyncState;
public object AsyncState { get { return _asyncState; } }
private ManualResetEvent _asyncWaitHandle;
public WaitHandle AsyncWaitHandle
{
get
{
if (this._asyncWaitHandle == null)
{
ManualResetEvent event2 = new ManualResetEvent(false);
Interlocked.CompareExchange<ManualResetEvent>(ref this._asyncWaitHandle?? event2?? null);
}
return _asyncWaitHandle;
}
}
private bool _completedSynchronously;
public bool CompletedSynchronously { get { return _completedSynchronously; } }
private bool _isCompleted;
public bool IsCompleted { get { return _isCompleted; } }
#endregion
/// <summary>
///
/// ?洢?????
/// </summary>
public int FinnalyResult { get; set; }
/// <summary>
/// End????????????Σ???????α???
/// </summary>
public int EndCallCount = 0;
/// <summary>
/// ref????
/// </summary>
public string ResultStr;
/// <summary>
/// ?????к??????
/// </summary>
/// <param name="obj">CalculateAsyncResult???????</param>
private static void AsyncCalculate(object obj)
{
CalculateAsyncResult asyncResult = obj as CalculateAsyncResult;
Thread.SpinWait(1000);
asyncResult.FinnalyResult = asyncResult._calcNum1 * asyncResult._calcNum2;
asyncResult.ResultStr = asyncResult.FinnalyResult.ToString();
// ?????????
asyncResult._completedSynchronously = false;
asyncResult._isCompleted = true;
((ManualResetEvent)asyncResult.AsyncWaitHandle).Set();
if (asyncResult._userCallback != null)
asyncResult._userCallback(ref asyncResult.ResultStr?? asyncResult);
}
}
public class CalculateLib
{
public IAsyncResult BeginCalculate(int num1?? int num2?? RefAsyncCallback userCallback?? object asyncState)
{
CalculateAsyncResult result = new CalculateAsyncResult(num1?? num2?? userCallback?? asyncState);
return result;
}
public int EndCalculate(ref string resultStr?? IAsyncResult ar)
{
CalculateAsyncResult result = ar as CalculateAsyncResult;
if (Interlocked.CompareExchange(ref result.EndCallCount?? 1?? 0) == 1)
{
throw new Exception("End????????????Ρ?");
}
result.AsyncWaitHandle.WaitOne();
resultStr = result.ResultStr;
return result.FinnalyResult;
}
public int Calculate(int num1?? int num2?? ref string resultStr)
{
resultStr = (num1 * num2).ToString();
return num1 * num2;
}
}
??????
???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11