2013-12-19 81 views
0

正在努力避免來自Web應用程序和Web服務的超時問題。如何從新線程調用方法

所以我試圖做的是什麼在web服務方法當前正在嘗試從新線程調用該邏輯,並啓動新線程後,我想要返回一些值到web應用程序,因此連接將以出現獲取超時的問題,並且新線程將在服務端執行它的過程。我們可以這樣做嗎?

以及如何從新線程調用方法?

我試圖做的代碼類似下面..

[WebMethod] 
public bool callingmethod(int num1,int num2) 
{ 
    employee emp=new employee(); 
    thread t=new thread(emp.method(num1,num2)); 
    t.start(); 
    return true; 
} 

public class employee 
{ 
    public void method(int a ,int b) 
    { 
     logic... 
    } 
} 

請指教me..i一直在尋找每一個地方得到適當的邏輯,但一切辦法複雜..

+0

嘗試增加TimeOut時間? –

+1

您需要傳遞一個lambda表達式。 – SLaks

回答

1

要做到這一點你可以傳遞一個lambda表達式的Thread構造表示代碼的線程開始運行,

Thread t= new Thread(() => emp.method(num1,num2)); 
+0

感謝帕爾它正在工作,但我在workerthread類encontered更多的問題,想知道你是否可以幫助! – Vicky

+0

可以請你指教我,如果你有任何想法的問題在belo link..http://stackoverflow.com/questions/20707359/system-typeinitializationexception-was-caught – Vicky

0
public bool MainMethod(int a, int b) 
{ 
    var employee = new Employee(); 

    ThreadPool.QueueUserWorkItem((argument) => { employee.DoWorkAsync(a, b); }); 

    return true; 
} 

public class Employee 
{ 
    public void DoWorkAsync(int a, int b) 
    { 
    // Do some work on a background thread. 
    } 
} 
何時執行
0

僅僅因爲你產生了一個新的線程並不意味着你不能有需要處理的異常。如果您使用.NET 4.0或更高版本,我會與任務做到這一點,因爲它是更好的在這種情況下,使用線程池線程:

public bool callingmethod(int num1, int num2) 
{ 
    Task.Factory.StartNew(() => 
    { 
     employee emp = new employee(); 
     emp.method(num1, num2); 
    }).ContinueWith(x => Console.WriteLine(x.Exception.ToString()), TaskContinuationOptions.OnlyOnFaulted); 
    return true; 
} 

如果您更喜歡手動這樣做或正在使用< .NET 4,儘量

public bool callingmethod(int num1, int num2) 
{   
    ThreadPool.QueueUserWorkItem(x => 
    { 
     try 
     { 
      employee emp = new employee(); 
      emp.method(num1, num2); 
     } 
     catch (Exception ex) 
     { 
      // Log exception 
     } 
    }); 
    return true; 
} 

注意,在這兩種情況下,這些都在後臺線程,因爲如果你退出你的應用程序,你不想讓線程繼續運行。

相關問題