【发布时间】:2015-11-17 18:24:34
【问题描述】:
我的班级执行以下操作(简化):
public void Startup(Action myAction)
{
_myAction = myAction;
}
private void EstablishApplicationEndpoint()
{
...
ApplicationEndpoint.BeginEstablish(OnApplicationEndpointEstablishCompleted, null);
}
private void OnApplicationEndpointEstablishCompleted(IAsyncResult result)
{
try
{
...
_myAction();
}
catch (Exception exception)
{
Console.WriteLine(exception);
}
}
BeginEstablish 方法将AsyncCallback 作为第一个参数。
但是 myAction 从未执行(我使用控制台应用程序中的类)。该操作应该向控制台输出一些内容并读取一行,但控制台会立即关闭。
我的控制台应用程序:
static void Main(string[] args)
{
StartPlatform();
}
private static void StartPlatform()
{
...
_platformController.Startup(SendContext);
}
private static void SendContext()
{
Console.WriteLine("Press ENTER to send context");
Console.ReadLine();
...
}
由于控制台不知道ReadLine- 调用会在某个时间自动关闭。我该如何防止这样做?
【问题讨论】:
-
为什么你认为它从未被执行?这个动作有什么作用?你看到了什么行为?
-
该动作应该向控制台输出一些内容并读取一行,但控制台立即关闭。
-
你如何调用你的代码?向我们展示
Main方法。一般来说,建议您为您的问题创建一个minimal reproducible example。 -
您是否在某个时候调用了相应的
EndEstablish方法?如果不是,那么您的控制台应用程序将在不等待回调的情况下退出,因为BeginEstablish方法会立即将控制权返回到下一条语句。 -
我想我知道为什么。控制台无法“预测”
ReadLine调用即将到来(它是异步的),因此它会立即关闭。
标签: c# asynchronous delegates asynccallback