如何识别方法中的当前线程?

时间:2017-09-19 07:12:57

标签: c# asp.net-mvc multithreading

我有一个网站,有这样的方法:

public Context GetContext()
{
 ...
}

当用户登录网站时,将多次调用此方法,该方法将返回一些信息。

现在我有一个由网站启动的其他线程,线程会做一些事情。并且在线程作业中这个方法也会被多次调用。

问题是,在这两种情况下,该方法应返回不同的结果,由于某种原因我不能使用其他方法或向该方法添加参数。

无论如何都要识别方法中的当前线程?基本上,我想存档这样的东西:

var thread = new Thread(GetContext);
thread.SomeFlag = True.
thread.Start()

public Context GetContext()
{
   Var thread = GetCurrentThread();
   If(thread.SomeFlag == True)
      //do some thing...
   Else
      //do some thing...
}

这可能吗?

1 个答案:

答案 0 :(得分:2)

您可以使用ThreadStaticAttribute为每个帖子单独设置字段的值。您可以在每个线程的开头设置值(您不能在线程外部设置它)并在以下内容中对其进行评估:

[ThreadStatic]
private static bool someFlag;

var thread = new Thread(GetContext);
thread.Start()

public Context GetContext()
{
   someFlag = true;
   //...
   if(someFlag == true)
      //do some thing...
   else
      //do some thing...
}

允许您为每个线程存储任意数据。与线程ID不同,您可以完全控制要存储的数据。