Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HttpClient GetAsync需要约2秒_C#_Wpf_Http - Fatal编程技术网

C# HttpClient GetAsync需要约2秒

C# HttpClient GetAsync需要约2秒,c#,wpf,http,C#,Wpf,Http,我的wpf程序从文本文件中读取命令,然后通过HttpClient发送这些命令。 每个GetAsync响应大约需要2秒才能完成。这似乎太长了,尤其是当我有50条命令要发送时 HttpClient发送/接收GetAsync消息的时间是否正常?有没有更快的方法 static readonly HttpClient client = new HttpClient(); public MainWindow() { InitializeComponen

我的wpf程序从文本文件中读取命令,然后通过HttpClient发送这些命令。 每个GetAsync响应大约需要2秒才能完成。这似乎太长了,尤其是当我有50条命令要发送时

HttpClient发送/接收GetAsync消息的时间是否正常?有没有更快的方法

static readonly HttpClient client = new HttpClient();
        public MainWindow()
        {
            InitializeComponent();
        }

        private async void Register_ClickAsync(object sender, RoutedEventArgs e)
        {

            int counter = 0;
            string line;

            System.IO.StreamReader file = new System.IO.StreamReader(@"C\path.txt");

            while ((line = file.ReadLine()) != null)
            {
                try
                {
                    var watch = Stopwatch.StartNew();
                    HttpResponseMessage response = await client.GetAsync(line);
                    response.EnsureSuccessStatusCode();
                    string responseBody = await response.Content.ReadAsStringAsync();

                    watch.Stop();
                    var elapsedMS = watch.ElapsedMilliseconds;
                    RequestTextBox.Text += "\n" + elapsedMS;

                }
                catch (HttpRequestException ex)
                {
                    Console.WriteLine("\nException Caught!");
                    Console.WriteLine("Message :{0} ", ex.Message);
                    this.RequestTextBox.Text += ("\n" + "Message: {0} ", ex.Message);
                }
            }
            file.Close();  
        }
    }
更新:
这个原始程序是一个.net核心WPF应用程序。我用完全相同的代码创建了一个.NETFramework WPF应用程序。net framework应用程序需要2000毫秒来发送第一个HttpClient GetAsync命令,然后您的代码等待每个请求


您可以通过调用
GetAsync
创建许多任务,然后使用
Task.WhenAll()
等待所有任务。它会更快。

您没有正确使用异步范例。您正在立即等待异步调用,因此它的行为与同步方法相同。异步方法的思想是,它开始工作并在后台运行,同时不阻止其他线程执行。这允许您一次运行多个线程,然后在准备使用它们时返回它们。在这种情况下,我强烈建议您使用。他们以做早餐为例,在本例中,他们做得不正确,正如你所问的:

Coffee cup = PourCoffee();
Console.WriteLine("coffee is ready");
Task<Egg> eggsTask = FryEggs(2);
Egg eggs = await eggsTask;
Console.WriteLine("eggs are ready");
Task<Bacon> baconTask = FryBacon(3);
Bacon bacon = await baconTask;
Console.WriteLine("bacon is ready");
Task<Toast> toastTask = ToastBread(2);
Toast toast = await toastTask;
ApplyButter(toast);
ApplyJam(toast);
Console.WriteLine("toast is ready");
Juice oj = PourOJ();
Console.WriteLine("oj is ready");

Console.WriteLine("Breakfast is ready!");
Coffee cup=PourCoffee();
控制台。WriteLine(“咖啡准备好了”);
任务eggsTask=煎蛋(2);
鸡蛋=等待鸡蛋;
控制台。WriteLine(“鸡蛋准备好了”);
任务baconTask=FryBacon(3);
培根培根=等待任务;
控制台。WriteLine(“培根准备好了”);
任务toastTask=烤面包(2);
Toast Toast=等待Toast任务;
苹果面包;
苹果酱(吐司);
控制台。WriteLine(“toast已准备就绪”);
果汁oj=PourOJ();
控制台写入线(“oj已准备就绪”);
控制台。WriteLine(“早餐准备好了!”);
若要修复它,必须调用Task.WhenAny()或Task.WhenAll()。这允许您一次运行所有任务,并在任务完成后(或在任务完成时)返回它们。这将大大提高您的性能

static async Task Main(string[] args)
{
    Coffee cup = PourCoffee();
    Console.WriteLine("coffee is ready");
    var eggsTask = FryEggsAsync(2);
    var baconTask = FryBaconAsync(3);
    var toastTask = MakeToastWithButterAndJamAsync(2);

    var allTasks = new List<Task>{eggsTask, baconTask, toastTask};
    while (allTasks.Any())
    {
        Task finished = await Task.WhenAny(allTasks);
        if (finished == eggsTask)
        {
            Console.WriteLine("eggs are ready");
        }
        else if (finished == baconTask)
        {
            Console.WriteLine("bacon is ready");
        }
        else if (finished == toastTask)
        {
            Console.WriteLine("toast is ready");
        }
        allTasks.Remove(finished);
    }
    Juice oj = PourOJ();
    Console.WriteLine("oj is ready");
    Console.WriteLine("Breakfast is ready!");

    async Task<Toast> MakeToastWithButterAndJamAsync(int number)
    {
        var toast = await ToastBreadAsync(number);
        ApplyButter(toast);
        ApplyJam(toast);
        return toast;
    }
}
static async Task Main(字符串[]args)
{
咖啡杯=PourCoffee();
控制台。WriteLine(“咖啡准备好了”);
var eggsTask=FryEggsAsync(2);
var baconTask=FryBaconAsync(3);
var toastTask=maketoaswithbutterandjamasync(2);
var allTasks=新列表{eggsTask、baconTask、toastask};
while(allTasks.Any())
{
任务完成=等待任务。WhenAny(所有任务);
如果(已完成==eggsTask)
{
控制台。WriteLine(“鸡蛋准备好了”);
}
else if(完成==baconTask)
{
控制台。WriteLine(“培根准备好了”);
}
else if(已完成==toast任务)
{
控制台。WriteLine(“toast已准备就绪”);
}
所有任务。删除(已完成);
}
果汁oj=PourOJ();
控制台写入线(“oj已准备就绪”);
控制台。WriteLine(“早餐准备好了!”);
异步任务MakeToastWithButterAndJamAsync(整数)
{
var toast=等待ToastBreadAsync(数字);
苹果面包;
苹果酱(吐司);
回敬祝酒;
}
}

它似乎很长。我把提琴手放在中间,看看到底是什么在占用时间,当你用邮递员执行这个请求时,你需要多少时间?500ms@canton7我正在研究Fiddler,以前从未使用过它。当您改用HttpWebRequest时,问题是否仍然存在?