????C#????????????????????????
??????????????? BeginInvoke ????? IAsyncResult ?? IsCompleted ??????????C#?????ú????ɡ??????????????????н???C#?????????????д????????????????????????????????????????

 

public class AsyncMain {
static void Main(string[] args) {
// The asynchronous method puts the thread id here.
int threadId;
// Create an instance of the test class.
AsyncDemo ad = new AsyncDemo();
// Create the delegate.
AsyncDelegate dlgt = new AsyncDelegate(ad.TestMethod);
// Initiate the asychronous call.
IAsyncResult ar = dlgt.BeginInvoke(3000??
out threadId?? null?? null);
// Poll while simulating work.
while(ar.IsCompleted == false) {
Thread.Sleep(10);
}
// Call EndInvoke to retrieve the results.
string ret = dlgt.EndInvoke(out threadId?? ar);
Console.WriteLine("The call executed on thread {0}??
with return value "{1}"."?? threadId?? ret);
}
}

 

????C#????????????????????????л??????
??????????????????????????????y????????????????????л????????????????? ThreadPool ???????С?
????????????????????????÷????? AsyncCallback ??д???? BeginInvoke??????????????????????????????????????磬???????????????????????У????????????????? EndInvoke??
public class AsyncMain {
// Asynchronous method puts the thread id here.
private static int threadId;
static void Main(string[] args) {
// Create an instance of the test class.
AsyncDemo ad = new AsyncDemo();
// Create the delegate.
AsyncDelegate dlgt = new AsyncDelegate(ad.TestMethod);
// Initiate the asychronous call.  Include an AsyncCallback
// delegate representing the callback method?? and the data
// needed to call EndInvoke.
IAsyncResult ar = dlgt.BeginInvoke(3000??
out threadId??
new AsyncCallback(CallbackMethod)??
dlgt );
Console.WriteLine("Press Enter to close application.");
Console.ReadLine();
}
// Callback method must have the same signature as the
// AsyncCallback delegate.
static void CallbackMethod(IAsyncResult ar) {
// Retrieve the delegate.
AsyncDelegate dlgt = (AsyncDelegate) ar.AsyncState;
// Call EndInvoke to retrieve the results.
string ret = dlgt.EndInvoke(out threadId?? ar);
Console.WriteLine("The call executed on thread {0}??
with return value "{1}"."?? threadId?? ret);
}
}