如何使这段代码不阻塞异步,使其不阻塞UI?我需要再用一个图书馆吗?
public static double GetRsi(string symbol1, string interval1, string period1)
{
//API KEY FROM alphavantage.co
string API_KEY = "xxxxxxx";
StringBuilder urlBuilder = new StringBuilder();
urlBuilder.Append($"https://www.alphavantage.co/");
urlBuilder.Append($"query?function=RSI&symbol={symbol1}&interval={interval1}&time_period={period1}&series_type=open&apikey={API_KEY}");
string jsonData = new WebClient().DownloadString(urlBuilder.ToString());
var machine = JsonConvert.DeserializeObject<AlphavantageData>(jsonData);
var _RSI = machine.TechnicalAnalysisRsi.Last().Value.Rsi;
return _RSI;
}发布于 2020-07-06 13:21:22
WebClient有一个可以使用的DownloadStringTaskAsync:
public static async Task<double> GetRsi(string symbol1, string interval1, string period1)
{
//API KEY FROM alphavantage.co
string API_KEY = "xxxxxxx";
StringBuilder urlBuilder = new StringBuilder();
urlBuilder.Append($"https://www.alphavantage.co/");
urlBuilder.Append($"query?function=RSI&symbol={symbol1}&interval={interval1}&time_period={period1}&series_type=open&apikey={API_KEY}");
using(var webClient = new WebClient())
{
string jsonData = await webClient.DownloadStringTaskAsync(urlBuilder.ToString());
var machine = JsonConvert.DeserializeObject<AlphavantageData>(jsonData);
var _RSI = machine.TechnicalAnalysisRsi.Last().Value.Rsi;
return _RSI;
}
}发布于 2020-07-06 13:47:59
您可以像前面建议的那样使用DownloadStringTaskAsync。我还想提到,在现代C#/.NET代码中不推荐使用WebClient。试一试System.Net.Http.HttpClient。它更轻,是async从开始。
请看一下msdn。
示例:
// You need 1 client per application
static readonly HttpClient client = new HttpClient();
...
var url = $"https://www.alphavantage.co/query?function=RSI&symbol={symbol1}&interval={interval1}&time_period={period1}&series_type=open&apikey={API_KEY}";
var response = await client.GetStringAsync(url);https://stackoverflow.com/questions/62756984
复制相似问题