2013-05-01 122 views
0

我有一些不同的方法,每個方法從不同的站點導入產品。 如果我按順序執行這些過程,整個過程需要很長時間,特別是當1個方法在響應性較差的站點上運行時。如何同時調用多個不同的方法

我寧願同時運行它們。

這是我到目前爲止有1例方法:

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 

我嘗試這樣做:

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

然後我得到的,我還沒有指定的3個參數變量3個錯誤: productIdPrefix,publishersite和feedURL

我也試過:

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

我得到這個錯誤: 方法'受保護的Sub ImportProductsPublisherA(productIdPrefix作爲字符串,publishersite作爲字符串,feedURL作爲字符串)「沒有與委託'委託的子WaitCallback(狀態作爲對象)兼容的簽名'。

任何幫助,非常感謝!

回答

1

這是WinForms還是asp.net?

如果winforms爲每個函數創建一個後臺工作器並啓動它們,它們將獨立工作在一個單獨的線程中。

如果asp.net要看看使用System.Threading.ThreadPool - 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 2013-05-02 12:58:52

+0

請參閱更新的答案。 – GJKH 2013-05-02 23:08:09

+0

謝謝,這個函數將1個參數傳遞給一個函數,但如果我想傳遞更多參數呢?在我的情況下,2個字符串和1個整數? – Flo 2013-05-03 07:07:47

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

我現在有: 暗淡作爲System.Threading.Tasks.Task =任務。 Factory.StartNew(ImportProductsSiteA) 但後來我得到的錯誤:重載決策失敗,因爲沒有可訪問的「StartNew」可以用這些參數調用:「公共職能StartNew(中TResult)(功能System.Func(中TResult))作爲System.Threading.Tasks.Task(Of TResult)':無法從這些參數中推斷出類型參數的數據類型。明確指定數據類型可能會更正此錯誤。'公共函數StartNew (行動作爲System.Action)作爲System.Threading.Tasks.Task':表達式不會產生一個值。 – Flo 2013-05-02 14:32:48

+0

是的,很抱歉,這是C#版本。我不確定VB的語法是什麼。 – Robin 2013-05-02 21:01:07