leancloud / csharp-sdk

LeanCloud C# SDK
MIT License
24 stars 8 forks source link

修复在云函数中通过 LCEngineRequestContext 获取 RemoteAddress,SessionToken 错误 #250

Closed onerain88 closed 1 year ago

onerain88 commented 1 year ago

原因分析

.NET 异步环境下不应使用 ThreadLocal。

在 .NET Core Web Application 框架下,当使用 await 调用异步接口时,会让出当前线程,当前线程会处理其他 Request。如果在这种情况下通过 ThreadLocal 存储变量,会在 await 完成后冲突。

修改方案

不再使用 ThreadLocal 存值,为每个 Request 创建 LCEngineRequestContext 实例并回调。

注意

如何升级

[LCEngineFunction("hello")]
public static async Task<string> Hello(LCEngineRequestContext context) {
  Console.WriteLine($"{context.SessionToken} says hello from {context.RemoteAddress}");
}
leeyeh commented 1 year ago

作为 breaking change,最好写一下原来的代码要怎么迁移(可以加一个 changelog.md,也可以单独加一个 migration-guides/v2.md 之类的)。

onerain88 commented 1 year ago

作为 breaking change,最好写一下原来的代码要怎么迁移(可以加一个 changelog.md,也可以单独加一个 migration-guides/v2.md 之类的)。

先把如何升级写在 description 里了(准备和日志的 breaking changes 一起发 2.0.0 版本)