正在努力避免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...
}
}
请建议我..我一直在寻找适当的逻辑,但一切都很复杂..
答案 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;
}
请注意,在这两种情况下,这些都在后台线程上,因为如果您退出应用程序,则不希望该线程继续运行。