2017-09-10 13 views
1

사용자 이름이 유효하지 않은 경우 현재 내 서버를 확인하고 있습니다. 이 코드는 조건이 true가되고 다른 일부 코드가 실행될 때까지 while 루프에서 실행됩니다.증가 비동기 HttpClient GetStringAsync 속도. 같은 시간에 다른 값을 전달하면 확인 차이가 발생하지 않습니다.

내 문제 :

그것은 내가 int amount 매개 변수를 내부에 저장할 것이다 값 중요하지 않습니다. 수표의 속도는 동일하게 유지됩니다.

일부 기기가 DefaultConnectionLimit 또는 그와 비슷한 것일 수 있습니다.

나는 현재하고 싶은 것 : 나는 다음과 같은 값을 증가 할

:

int amount = Int32.Parse(bunifuCustomLabel11.Text); 

동시에 더 검사를 실행합니다. 그러나 어떤 특정 시점에서 속도는 더 이상 증가하지 않을 것입니다. 예를 들어 200을 입력했을 때와 같은 속도로 코드가 실행될 것이라고 가정 해 봅시다.

기능 : 핸들/이름의 현재 상태를 확인하고 true 또는 false를 반환 :

private async Task CheckUntilOneOfTheUsersIsAvaliable() 
{ 
    int amount = Int32.Parse(bunifuCustomLabel11.Text); 
    await Task.WhenAny(Enumerable.Range(0, amount).Select(i => CheckUntilUserIsAvaliable())); 

    // If aviable run some other code.. 
} 

private async Task CheckUntilUserIsAvaliable() 
{ 
    while (!await IsUserAvaliable(bunifuMetroTextbox3.Text) && changedUser == false) 
    { 
     // method_5 increaes a label 
     method_5(); 
     await Task.Delay(1000); 
    } 
} 

private async Task<bool> IsUserAvaliable(string handle) 
{ 
    while (true) 
    { 
     using (HttpClient client = new HttpClient()) 
     { 
      try 
      { 
       string content = await client.GetStringAsync("http://urlcom/script.php?user=" + handle); 
       return content.Contains("No users found"); 
      } 
      catch (WebException ex) 
      { 
       Console.WriteLine(ex.Message); 
      } 
     } 
    } 
} 
+0

HttpClient의 인스턴스를 너무 많이 만들고 삭제하면 그 효과가 발생할 수 있습니다. 하나의 인스턴스를 생성하고 응용 프로그램의 수명 동안 재사용하십시오. 또한 무한 루프가있는 논리로 인해 문제가 발생할 수 있습니다. – Nkosi

답변

0

  1. 실행할 수있는 작업의 수는 몇 가지 제한 사항이 있습니다 병행하여. 물론 100 또는 심지어 200이 아닙니다.

  2. 서비스 또는 호스트 된 서버가 동일한 클라이언트에서 허용하는 연결 수입니다.

일부 디버그 로그를 작성하여 HttpClient 개의 인스턴스가 서버와 활발하게 통신 중인지 확인할 수 있습니다.

+0

응답 해 주셔서 감사합니다. 나는 내 웹 서버를 살펴볼 것이다. 피들러에서 응답을 확인하면 실제 요청 수가 적습니다. – d4ne