我最近在阅读有关 async/await 的内容,我想知道如何在属于不同类的不同线程之间共享数据?假设我们HttpContext
在某个 Web 应用程序中有 。此上下文包含有关userId
等sessionId
的信息。我们的 Web 应用程序提供了一些数据,这些数据由在另一台计算机上执行的某些控制台应用程序使用。如果此控制台应用程序发生错误,我会将其写入日志文件。userId
并且sessionId
也应该写入这个日志文件。但是在这个控制台应用程序中创建的每个线程都有自己的上下文。所以,我正在寻找一种设置userId
和sessionId
线程上下文的方法。我不想使用一些静态类或volatile
字段。我在下面放置了一个简单的控制台应用程序示例。
public sealed class MainService
{
/// <summary>
/// The main method which is called.
/// </summary>
public void Execute()
{
try
{
searchService.ExecuteSearchAsync().Wait();
}
catch (Exception e)
{
// gets additional info (userId, sessionId) from the thread context
StaticLoggerClass.LogError(e);
}
}
}
public sealed class SearchService
{
private IRepository repository = new Repository();
public async Task ExecuteSearchAsync()
{
try
{
var result = await this.GetResultsAsync();
}
catch (Exception e)
{
// gets additional info (userId, sessionId) from the thread context
StaticLoggerClass.LogError(e);
}
}
private async Task<ResultModel> GetResultsAsync()
{
var result = this.repository.GetAsync();
}
}
public sealed class Repository
{
private IClient client;
public async Task<Entity> GetAsync()
{
return await client.GetResultAsync();
}
}