2013-07-17 2 views
0

while 루프 내에서 매분마다 여러 함수를 연속적으로 호출하려고합니다. 함수 실행 시간이 1 분 이상 걸리더라도 다른 함수가 완료 될 때까지 기다리지 않아야합니다. 제가연속 실행 여러 함수 독립적으로 C#

 while (true) 
     { 
      if(executebinary) BinaryConversion(); 
      if(emailvalidation) ValidateEmails(); 

      System.Threading.Thread.Sleep(60000); 
     } 

, 아래와 같이 쓰면 BinaryConversion 함수의 지연은()는 함수 ValidateEmails의 실행을 지연한다(). 두 가지 기능을 동시에 실행할 수있는 방법이 있습니까? 당신이 그 (것)들을 병렬로 실행하려면

+0

두 개의 System.Timers.Timer를 사용하십시오. – Rotem

+0

Btw, 1000ms는 1 분이 아니라 1 초입니다. – Rotem

+0

질문 # 1, 당신은 A와 B 기능이 있습니다. 첫 번째 틱에서 두 가지를 모두 실행 한 다음 1 분 정도 기다립니다. 분이 끝나면 A는 끝나지 않고 B는 끝납니다. A가 완료되었는지 여부에 관계없이 B를 실행하고 싶지만 A가 아직 완료되지 않았 으면 A를 다시 시작 하시겠습니까? A의 이전 사본과 새로운 사본이 모두 실행됩니다. –

답변

1

당신은 Parallel.Invoke을 사용할 수 있습니다 : 당신의 편집 긴 예를 바탕으로

while (true) 
{ 

    Parallel.Invoke(BinaryConversion, ValidateEmails); 

    System.Threading.Thread.Sleep(1000); 
} 

: 귀하의 의견을 바탕으로

namespace CSharp 
{ 
    using System; 
    using System.Threading.Tasks; 

    class Program 
    { 
    static void Main() 
    { 
     bool executebinary = true; 
     bool emailvalidation = false; 

     while (true) 
     { 
     Parallel.Invoke(
     () => 
      { 
       if (executebinary) 
       { 
       BinaryConversion(); 
       } 
      }, 
     () => 
      { 
       if (emailvalidation) 
       { 
       ValidateEmails(); 
       } 
      }); 

     System.Threading.Thread.Sleep(1000); 
     } 
    } 

    private static void ValidateEmails() 
    { 

    } 

    private static void BinaryConversion() 
    { 

    } 
    } 
} 

로부터의 간섭없이 simultanously 실행 모두 기타 :

namespace CSharp 
{ 
    using System; 
    using System.Threading.Tasks; 

    class Program 
    { 
    static void Main() 
    { 
     bool executebinary = true; 
     bool emailvalidation = false; 

     Parallel.Invoke(
     () => 
      { 
      while(true) if (executebinary) BinaryConversion(); 
      }, 
     () => 
      { 
      while(true) if (emailvalidation) ValidateEmails(); 
      }); 
     } 
    } 

    private static void ValidateEmails() 
    { 

    } 

    private static void BinaryConversion() 
    { 

    } 
    } 
} 
+0

Parellel.invoke를 시도했지만, ValidateEmail 함수가 10 분이 걸리면 함수 Binaryconversion도 10 분 후에 exucute가됩니다. 매분마다 이진 변환을 실행해야합니다.ValidateEmail이 완료되는 데 10 분이 걸리는 경우에도 마찬가지입니다. –

+0

그런 다음 while 루프를 작업 내부에 놓습니다. – nvoigt

0

여러 가지가 있습니다. 012 당신은 다음 두 가지 방법으로 C# 5를 사용하는 경우 3,516,: 당신이 비동기를 사용하여 방법을 만들 경우

을, 당신은

타이머 수 : & 기다리고 비동기를 사용하여 메소드를 호출 한 후 1 분 간격으로 타이머를 킥과 : 당신이 돈이 경우

nvoigt

언급 http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx 또는 같이, t는 Thread.sleep를 필요합니다.

당신은 이전 버전을 사용하는 경우 :

당신은 여전히 ​​타이머를 사용하고 이러한 방법에 대한 대리자를 만든 다음 비동기를 호출 할 수 있습니다

:

http://msdn.microsoft.com/en-us/magazine/cc301332.aspx

당신이 할 수 있습니다 이유를 thread.sleep을 피하려면 UI 애플리케이션 인 경우 피하려는 스레드를 차단합니다.