c# - 当服务器使用 WriteAsync 方法时,“响应流已经完成”
问题描述
我得到“响应流已经完成。” 当服务器使用 pi-stream 调用 WriteAsync() 方法时。只有当我使用 Thread.sleep 时,客户端有时才能在睡眠期间获取流。但我知道这不是解决方案。所以请告诉我我该怎么办!
我使用了 .net core 2.2 和 vs community 2019 16.2.3
proto:
rpc CppyFile(stream Chunk)returns(stream Back){}
message Chunk{
bytes Content=1;
string FileName=2;
string Flag=3;
}
message Back{
bytes Content=1;
UploadStatus statue=2;
string Flag=3;
}
Server:
await responseStream.WriteAsync(new Back
{
Content = ByteString.FromStream(stream),
Flag = fname,
Statue = new UploadStatus
{
Message = "2",
Code = UploadStatusCode.Unknown
}
});
client:
using (var call = client.CppyFile())
{
try
{
await call.RequestStream.WriteAsync(chunk);
Console.WriteLine("Sending");
//################################################################################## here's Problem
await call.RequestStream.CompleteAsync();
//Thread.Sleep(8 * 1000);
//##################################################################################
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
var responseReaderTask = Task.Run(async () =>
{
while (await call.ResponseStream.MoveNext())
{
var note = call.ResponseStream.Current;
//get sending from server
......
这是详细错误。
System.InvalidOperationException:响应流已经完成。在 Grpc.Core.Internal.AsyncCallServer 2.CheckSendAllowedOrEarlyResult() in T:\src\github\grpc\src\csharp\Grpc.Core\Internal\AsyncCallServer.cs:line 195
at Grpc.Core.Internal.AsyncCallBase
2.SendMessageInternalAsync(TWrite msg, WriteFlags writeFlags) 在 T:\src\github\grpc\src\csharp\Grpc.Core\Internal\AsyncCallBase.cs:line 124
解决方案
推荐阅读
- javascript - 我正在尝试对在变量中保存为字符串的液体代码运行 javascript 字符串替换方法,但它不起作用
- java - @CsvBindByName - 使用备用列名绑定列
- reactjs - 如何在输入表单时阻止输入标签中的负值
- c# - 有没有更好的方法在 EF Core 中包含其他字段/列而不加载整个导航属性
- php - array_key_exists() 期望参数 2 是数组,在 wp 主题中给出 null
- scala - Emacs 菊石模式
- hql - 选择仅存在于 1 个表中的 id
- python - 不为字典中没有值的键打印 None
- openapi-generator - 为openapi生成的模型类添加注解
- javascript - React Native ScrollView 单子不滚动没有高度