如何从新线程调用方法

时间:2013-12-19 22:08:32

标签: c# asp.net multithreading web-services

正在努力避免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...
   }
}

请建议我..我一直在寻找适当的逻辑,但一切都很复杂..

3 个答案:

答案 0 :(得分:1)

为此,您可以将lambda表达式传递给Thread构造函数,该构造函数表示线程开始运行时要执行的代码

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

答案 1 :(得分: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.
  }
}

答案 2 :(得分:0)

仅仅因为您正在产生新线程并不意味着您不能拥有需要处理的异常。如果您使用的是.NET 4或更高版本,我会使用任务执行此操作,因为在这种情况下最好使用ThreadPool线程:

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;
}

请注意,在这两种情况下,这些都在后台线程上,因为如果您退出应用程序,则不希望该线程继续运行。

相关问题