首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使WebClient().DownloadString异步

使WebClient().DownloadString异步
EN

Stack Overflow用户
提问于 2020-07-06 13:19:11
回答 2查看 152关注 0票数 0

如何使这段代码不阻塞异步,使其不阻塞UI?我需要再用一个图书馆吗?

代码语言:javascript
复制
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; 
            }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-06 13:21:22

WebClient有一个可以使用的DownloadStringTaskAsync

代码语言:javascript
复制
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; 
    }
}
票数 2
EN

Stack Overflow用户

发布于 2020-07-06 13:47:59

您可以像前面建议的那样使用DownloadStringTaskAsync。我还想提到,在现代C#/.NET代码中不推荐使用WebClient。试一试System.Net.Http.HttpClient。它更轻,是async从开始。

请看一下msdn

示例:

代码语言:javascript
复制
// 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);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62756984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档