我正在开展一个类似这样的课程:
public class MatchmakingService {
private bool working;
private List<MatchmakingUser> matchmakingUsers;
// ...
public MatchmakingService()
{
matchmakingUsers = new List<MatchmakingUser>();
}
public void StartService () {
var thread = new Thread(this.MatchmakingWork);
working = true;
thread.Start();
}
void MatchmakingWork () {
while (working)
{
// some work
Thread.Sleep(1000);
}
}
// ...
public void AddMatchmakingUser(MatchmakingUser user)
{
matchmakingUsers.Add(user);
}
}
现在我担心matchmakingUsers列表,所以我想我只是称这个AddMatchmakingUser在这个服务线程中执行,但是我真的不知道怎么做。我读过Dispatcher课程,但是Unity中的单声道没有它或它完全是一种不同的技术。基本上我想做:
MatchmakingService mmService = new MatchmakingService();
mmService.Start();
// sometime later when needed
mmService.Somehowinvokeinworkingthread(mmService.AddMatchMakingUser(...));
答案 0 :(得分:0)
只需从任何线程调用AddMatchmakingUser
并同步所有访问列表的代码,以防止它们同时发生并导致竞争条件:
public void AddMatchmakingUser(MatchmakingUser user)
{
lock (matchmakingUsers)
{
matchmakingUsers.Add(user);
}
}
无论何时访问列表,都要在MatchmakingWork
内执行相同操作。