2013-05-01 3 views
0

각기 다른 사이트의 제품을 가져 오는 방법이 다릅니다. 이들을 순차적으로 실행하면 전체 프로세스가 많은 시간을 필요로합니다. 특히 응답이 적은 사이트에서 1 개의 메소드가 실행되는 경우 더욱 그렇습니다.여러 개의 다른 메서드를 동시에 호출하는 방법

차라리 동시에 실행하고 싶습니다. 그런 다음

System.Threading.ThreadPool.QueueUserWorkItem(New System.Threading.WaitCallback(AddressOf ImportProductsPublisherA()), fpm) 

나는 내가 3 개 개의 매개 변수에 대한 인수를 지정하지 않은 3 오류를 얻을 :

Public Class feedParameters 

Private _productIdPrefix As String 
Private _publishersite As String 
Private _feedURL As String 

Public Property productIdPrefix() As String 
    Get 
     Return _productIdPrefix 
    End Get 
    Set(value As String) 
     _productIdPrefix = value 
    End Set 
End Property 
Public Property publishersite() As String 
    Get 
     Return _publishersite 
    End Get 
    Set(value As String) 
     _publishersite = value 
    End Set 
End Property 
Public Property feedURL() As String 
    Get 
     Return _feedURL 
    End Get 
    Set(value As String) 
     _feedURL = value 
    End Set 
End Property 


End Class 




Dim fpm As New feedParameters 
fpm.publishersite = "mypublisher.nl" 
fpm.feedURL = "http://www.domain.com/test.xml" 
fpm.productIdPrefix = "10" 

Protected Sub ImportProductsPublisherA(ByVal productIdPrefix As String, ByVal publishersite As String, ByVal feedURL As String) 

End Sub 

나는이 시도 :

는 지금까지 1 예를 들어, 방법이 무엇 : 나는 또한 시도

productIdPrefix, publishersite 및 feedURL :

System.Threading.ThreadPool.QueueUserWorkItem(New System.Threading.WaitCallback(AddressOf ImportProductsPublisherA), fpm) 

이 오류 메시지가 표시됩니다. 메서드 'Deleted Sub WaitCallback (State As Object)'과 호환되는 서명 'Protected Sub ImportProductsPublisherA (String으로 productIdPrefix String, publishersite As String, feedURL String)'의 서명이 없습니다.

도움을 주시면 대단히 감사하겠습니다.

답변

1

이 WinForms 또는 asp.net입니까?

winforms가 각 함수에 대한 백그라운드 작업자를 만들고 모든 함수를 시작하면 별도의 스레드에서 독립적으로 작동합니다.

당신이 System.Threading.ThreadPool 사용보고 싶지 asp.net 경우 - 당신 기능은 어떤 매개 변수를 사용하는 경우 http://msdn.microsoft.com/en-us/library/system.threading.threadpool.aspx

System.Threading.ThreadPool.QueueUserWorkItem(New System.Threading.WaitCallback(AddressOf ImportProductsSiteA)) 

System.Threading.ThreadPool.QueueUserWorkItem(New System.Threading.WaitCallback(AddressOf ImportProductsSiteB)) 

System.Threading.ThreadPool.QueueUserWorkItem(New System.Threading.WaitCallback(AddressOf ImportProductsSiteC)) 

System.Threading.ThreadPool.QueueUserWorkItem(New System.Threading.WaitCallback(AddressOf ImportProductsSiteD)) 

을이처럼 그들을 전달할 수 있습니다

System.Threading.ThreadPool.QueueUserWorkItem(New System.Threading.WaitCallback(AddressOf ImportProductsSiteA), parameter-here) 
+0

그것은 asp.net의 . 그리고 제가 제공 한 링크를 살펴 보았습니다.하지만이 기술을 사용하여 4 가지 방법을 어떻게 호출 할 수 있습니까? 나는 아직 논리를 이해하지 못한다 :) 고마워! – Flo

+0

업데이트 된 답변을 참조하십시오. – GJKH

+0

감사합니다, 이것은 함수에 1 개의 매개 변수를 전달할 때 작동하지만 더 많은 매개 변수를 전달하려면 어떻게해야합니까? 내 경우에는 2 문자열과 1 정수? – Flo

1
using System.Threading.Tasks; 

namespace Foo 
{ 
    public class Bar 
    { 
     public void ImportProductsSiteA() { } 
     public void ImportProductsSiteB() { } 
     public void ImportProductsSiteC() { } 
     public void ImportProductsSiteD() { } 

     public void Execute() 
     { 
     var a = Task.Factory.StartNew(ImportProductsSiteA); 
     var b = Task.Factory.StartNew(ImportProductsSiteB); 
     var c = Task.Factory.StartNew(ImportProductsSiteC); 
     var d = Task.Factory.StartNew(ImportProductsSiteD); 
     Task.WaitAll(a, b, c, d); 
     } 
    } 
} 
+0

나는 다음과 같습니다. Dim a As System.Threading.Tasks.Task = Task. Factory.StartNew (ImportProductsSiteA) 하지만 다음과 같은 오류가 발생합니다. 이러한 인수를 사용하여 액세스 가능한 'StartNew'를 호출 할 수 없기 때문에 오버로드를 확인하지 못했습니다. 'Public Function StartNew (Of TResult) (System.Func (Of TResult) As System.Threading.Tasks.Task (Of TResult) ': 형식 매개 변수의 데이터 형식을 이러한 인수에서 유추 할 수 없습니다. 명시 적으로 데이터 형식을 지정하면이 오류가 해결 될 수 있습니다. 공용 함수 StartNew (As As System.Action) As System.Threading.Tasks.Task ': 식은 값을 생성하지 않습니다. – Flo

+0

네, 죄송합니다 C# 버전입니다. VB 용 구문이 무엇인지 모르겠습니다. – Robin

관련 문제