대리인을 테스트하고 BeginInvoke 및 EndInvoke에서 IVE를 중지했습니다. 이 동료 코드에서 어떤 일이 일어 났는지 궁금합니다.BeginInvoke 첫 번째 호출이 먼저 완료된 이유는 무엇입니까?
하지만 첫 번째 시작 호출은 초가 2 초이고 첫 번째 호출이 3 초이므로 두 번째 이후에 종료됩니다. 이렇게하면 동기화 통화가되지 않습니까? 왜 ?
실제 호출은 EndInvoke가 사용될 때만 호출되는 것처럼 보입니다.
/// <summary>
/// Démonstration d'un appel d'une méthode ASYNCRONE avec BeginInvoke() SANS rappel (Callback).
/// </summary>
public class AsyncBeginInvokeDemo
{
// Voici la méthode délégué.
// L'équivalent: Func<int, string> (Func<In1, ..., Out>)
// Note: Aurait pu être également Action<int> si la méthode ne retourne pas de valeurs.
delegate string MethodDelegate(int iCallTime, string message);
/// <summary>
/// Démarrer la démonstration.
/// </summary>
public void Start()
{
string strReturnedData = String.Empty;
// Attaché la méthode au délégué.
MethodDelegate dlgt = new MethodDelegate(this.LongRunningMethod);
// Initié l'appel asyncrone A.
IAsyncResult arA = dlgt.BeginInvoke(3000, "A est terminée!", null, null);
// Initié l'appel asyncrone B.
IAsyncResult arB = dlgt.BeginInvoke(2000, "B est terminée!", null, null);
// Retrieve the results of the asynchronous call.
strReturnedData = dlgt.EndInvoke(arA);
Console.WriteLine(strReturnedData);
strReturnedData = dlgt.EndInvoke(arB);
Console.WriteLine(strReturnedData);
}
/// <summary>
/// Il s'agit de l'opération à executé.
/// </summary>
/// <param name="iCallTime">Temps d'execution de l'opération. (Simulation)</param>
/// <returns>Données par l'opération. (Simulation)</returns>
public string LongRunningMethod(int iCallTime, string message)
{
// Mettre le thread en attente pendant un nombre de milliseconde x.
Thread.Sleep(iCallTime);
// Retourner des données.
return message;
}
}
이 출력 :
EST로 terminée! 끝까지 기다려주세요!
B est terminée! 끝내기! 당신은 명시 적으로 EndInvoke
를 호출하고
를, 그것은 변환 가치가 있었을 것이다 게시하기 전에 영어로 귀하의 모든 의견 ... –