我有一个服务,我正在重写使用线程。我明白,一个线程的状态不应该被另一个线程访问,但是我对“状态”的构成有点困惑。这是否意味着在方法范围之外的任何字段/属性/方法?使用线程时,我需要锁定“只读”服务吗?
具体来说,我的服务看起来是这样的:
public class MyService
{
private IRepository<MyClass> repository;
private ILogger log;
...
public void MyMethod()
{
...
var t = new Thread(MyMethodAsync);
t.Start(someState);
}
//Is this OK???
public void MyMethodAsync(object state)
{
var someState = (MyState)state;
log.Log("Starting");
var someData = repository.GetSomeData(someState.Property);
//process data
log.Log("Done");
}
//Or should I be doing this:
public void MyMethodAsync2(object state)
{
var someState = (MyState)state;
lock(log){
log.Log("Starting"); }
lock(repository){
var someData = repository.GetSomeData(someState.Property);}
//process data
lock(log){
log.Log("Done"); }
}
}