关于官方文档中上下文的疑问 返回

请问,文档中同一个对象不能跨上下文使用(支持异步上下文)。
上下文指的是:一次请求(即使在请求中开启Task)也算一个上下文吗?
热忱回答(19)
-
TianHao VIP0
2021/9/14
因为在SqlSugarScope时,一次请求中,开启线程按照文档理解,应该是new一个对象,而结果是和请求中的contextid是一致的。
不太理解,请各位解惑。
谢谢
0 回复 -
叶萌 VIP0
2021/9/14@TianHao:写具体的代码吧
0 回复 -
TianHao VIP0
2021/9/14
0 回复 -
fate stay night VIP0
2021/9/14@TianHao: 你这个是异步的错误用法, 如果用异步方法 你的代码中要加await
0 回复 -
fate stay night VIP0
2021/9/14这个是 Task.WaitAll 正确用法 https://www.donet5.com/Home/Doc?typeId=2349
0 回复 -
fate stay night VIP0
2021/9/14如果你直接开线程不用异步方法 Task.Run那么他的contextid就不一样了
0 回复 -
TianHao VIP0
2021/9/14@fate stay night:感谢你的回复,本质上应该没有太大区别吧。还有上下文的问题,还请解答一下,谢谢
0 回复 -
TianHao VIP0
2021/9/14@fate stay night:
0 回复 -
fate stay night VIP0
2021/9/14@TianHao: 异步方法那是同一个异步上下文 , 在不用任何异步方法的时候
private static void ConfiQuery()
{
var db = GetInstance();
Console.WriteLine(db.ContextID);
Task.Run(() =>
{
Console.WriteLine(db.ContextID);
});
}
这种ID就会变化
0 回复 -
fate stay night VIP0
2021/9/14Task.Run 不变成变量给 委托对象那么就和NEW线程一样效果
0 回复 -
TianHao VIP0
2021/9/14@fate stay night:那上下文指的是?

这句话应该如何解读呢
0 回复 -
TianHao VIP0
2021/9/14@fate stay night:

如上还是相同的,很抱歉。
能否稍微详细的,讲解一下。。
谢谢你的时间。
0 回复 -
fate stay night VIP0
2021/9/14-
0 回复 -
fate stay night VIP0
2021/9/14-
0 回复 -
fate stay night VIP0
2021/9/14你的仓储看不到实现,换成new sqlsugarscope 测试
0 回复 -
fate stay night VIP0
2021/9/14写到一个方法里面不要有任何封装
0 回复 -
fate stay night VIP0
2021/9/14[HttpGet] public async Task<List<Guid>> Get() { var db = DbScoped.SugarScope; List<Guid> result = new List<Guid>(); result.Add(db.ContextID); Task.Run(() => { result.Add(db.ContextID); }); await Task.Run(() => { result.Add(db.ContextID); }); return result; }这个是用例 ,我这边测试结果是正确的
["091a8bea-ad95-4bc1-9ef3-b23157e7d0e7","6b3f78d7-5595-4812-ac39-efa208d809b6","cc9d89b0-2f28-473c-8825-07ab9828cfaf"]
0 回复 -
fate stay night VIP0
2021/9/14可以直接拿我这个例子去测试
0 回复 -
fate stay night VIP0
2021/9/14在API项目中 只要TASK.RUN CONTEXTID都会变化
0 回复