[英]Calling an API sync or async?
我正在尝试使用我在 NODE.js 中开发的 API,我正在从 ac# windows 窗体桌面应用程序执行此操作。
API 是在服务器端异步编写的,但它可以在我的客户端内部同步吗? 让我解释一下我的意思。
这是我正在做的代码示例:
public static DateTime GetDateTime()
{
try
{
string result = Task.Run(() =>
client.GetStringAsync(client.BaseAddress)).Result;
Date currentTime = JsonConvert.DeserializeObject<Date>(result);
return currentTime.Value;
}
catch (Exception ex)
{
throw ex;
}
}
稍后在程序中我调用这个函数:
DateTime currentDate = GymAPI.GetDateTime();
根据我的研究,这是同步运行的……这就是我需要的,因为在函数调用之后,我使用日期时间来计算和显示人员列表的年龄。
据我了解,如果我使用 ASYNC/AWAIT,计算人员年龄的代码将立即执行,而我很可能还没有当前日期的值。 我在这个假设中正确吗?
除了发送电子邮件时(大约需要 5 秒),我是否需要在我的应用程序中运行任何 ASYNC 并且我希望 sendmail 任务在后台运行,同时应用程序保持对用户的响应?
最后,更重要的是,上面的代码似乎可以工作,但是......我这样做的方式是使调用同步运行的最佳实践吗? 没有死锁? 感谢您耐心阅读本文,但我找到了很多帖子,老实说我找不到所有答案。
如果问题太多,请只回答最后一个! :)
所以我从根本上感到困惑,我没有掌握 ASYNC/AWAIT/TASK 的关系......但现在我认为更清楚了。
我遵循了建议并按照此链接中的示例采用了 ASYNC 方式: https : //docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/
我重写了所有内容以防万一有人关心:
public static async Task<DateTime>GetDateTime()
{
using (HttpClient client = new HttpClient())
{
// Omitted some code here for simplicity.
try
{
string result = await client.GetStringAsync(client.BaseAddress);
Date currentTime = JsonConvert.DeserializeObject<Date>(result);
return currentTime.Value;
}
catch (Exception ex)
{
throw ex;
}
}
}
基本上,您可以运行 Tasks ASYNC,因此当您调用函数 GetDateTime() 时,您将开始运行任务,而不会阻止以下代码的执行,如下所示:
Task<DateTime> getCurrentDate = MyClass.GetDateTime();
//Code here executes right away without waiting for the task to finish
在这种情况下,我在构造函数中启动了任务并在我需要这样的结果之前等待它:
DateTime result = await getCurrentDate;
或者,您可以在同一行代码中开始并等待任务完成:
DateTime result = await MyClass.getCurrentDate();
使用上面的方法,它看起来是同步的,但您并没有真正利用在其他代码执行时运行一个或多个任务的优势。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.