首页 / C# / c# – 等待另一个方法调用然后继续结果
c# – 等待另一个方法调用然后继续结果
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 等待另一个方法调用然后继续结果,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2023字,纯文字阅读大概需要3分钟。
内容图文
我试图从另一个.dll文件调用一个方法.
它通过VPN发送消息,然后从另一台计算机返回RecievedMessage.
你现在需要时间来发送和接收消息,而VpnObject只是发送消息,我应该等待监听器调用RecievedMessage.
这个方法是这样的!
public string RecievedMessage()
{
string Recieved ;
// Some VPN Code and then return the result;
return Recieved;
}
public string SendAndRecieveMessage(string MessageToSend)
{
string RecievedAnswer = string.Empty;
// Now Sending Message through the VPN
VpnObject.SendMessage(MessageToSend);
//Then want to Recieve the answer and return the answer here .
return RecievedAnswer;
}
我只是在想如何等待RecievedMessage调用然后返回结果.
您知道使用变量并为其分配值并检查时间很简单,但它会显着降低性能.
在调用RecievedMessage时,是否仍然从SendAndRecieveMessage继续? (我认为这是异步和等待,但不知道如何!)
编辑:VpnObject只是通过vpn的发送者和接收者.它包含一个简单的套接字发送和一个侦听器,它在收到新消息时调用一个方法(RecievedMessage).
解决方法:
是否有轮询的替代方案取决于您使用的库是否提供任何事件或回调,它们将在请求完成时告诉您.
无论哪种方式,暴露异步操作的延迟结果的标准方法是使用Task.您的方法签名如下所示:
public Task<string> SendAndRecieveMessage(string MessageToSend)
现在,您实际实现该方法的方式取决于VpnObject公开的API. TaskCompletionSource对于这种事情非常有用.
如果VpnObject有一个事件在请求完成时触发:
public Task<string> SendAndReceiveMessage(string messageToSend)
{
var tcs = new TaskCompletionSource<string>();
...
VpnObject.OnMessageReceived += (s, e) => tcs.SetResult(e.Message);
...
return tcs.Task;
}
如果VpnObject可以接受它将在请求完成时调用的回调:
public Task<string> SendAndReceiveMessage(string messageToSend)
{
var tcs = new TaskCompletionSource<string>();
...
VpnObject.OnMessageReceived(message => tcs.SetResult(message));
...
return tcs.Task;
}
如果VpnObject不支持任何此类,您可以回退到轮询:
public async Task<string> SendAndReceiveMessage(string messageToSend)
{
var tcs = new TaskCompletionSource<string>();
...
while(!VpnObject.IsMessageReceived)
await Task.Delay(500); // Adjust to a reasonable polling interval
...
return VpnObject.Message;
}
内容总结
以上是互联网集市为您收集整理的c# – 等待另一个方法调用然后继续结果全部内容,希望文章能够帮你解决c# – 等待另一个方法调用然后继续结果所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。