2
0
mirror of https://github.com/esiur/esiur-dotnet.git synced 2026-03-13 03:10:39 +00:00

IAsyncEnumerable

This commit is contained in:
2026-02-02 22:22:47 +03:00
parent 3f7e3992c1
commit 7d958bfaf8
3 changed files with 32 additions and 2 deletions

View File

@@ -39,6 +39,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="10.0.2" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.14.0" PrivateAssets="all" /> <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.14.0" PrivateAssets="all" />
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="4.14.0" PrivateAssets="all" /> <PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="4.14.0" PrivateAssets="all" />
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" /> <PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />

View File

@@ -1362,7 +1362,36 @@ partial class DistributedConnection
return; return;
} }
if (rt is System.Collections.IEnumerable && !(rt is Array || rt is Map<string, object> || rt is string)) if (rt is IAsyncEnumerable<object>)
{
var enu = rt as IAsyncEnumerable<object>;
var enumerator = enu.GetAsyncEnumerator();
Task.Run(async () =>
{
try
{
while (await enumerator.MoveNextAsync())
{
var v = enumerator.Current;
SendChunk(callback, v);
}
SendReply(IIPPacketReply.Completed, callback);
if (context != null)
context.Ended = true;
}
catch (Exception ex)
{
if (context != null)
context.Ended = true;
var (code, msg) = SummerizeException(ex);
SendError(ErrorType.Exception, callback, code, msg);
}
});
}
else if (rt is System.Collections.IEnumerable && !(rt is Array || rt is Map<string, object> || rt is string))
{ {
var enu = rt as System.Collections.IEnumerable; var enu = rt as System.Collections.IEnumerable;

View File

@@ -143,7 +143,7 @@ public class FunctionTemplate : MemberTemplate
{ {
rtType = TRU.FromType(mi.ReturnType.GetGenericArguments()[0]); rtType = TRU.FromType(mi.ReturnType.GetGenericArguments()[0]);
} }
else if (genericRtType == typeof(IEnumerable<>))// || genericRtType == typeof(IAsyncEnumerable<>)) else if (genericRtType == typeof(IEnumerable<>) || genericRtType == typeof(IAsyncEnumerable<>))
{ {
// get export // get export
rtType = TRU.FromType(mi.ReturnType.GetGenericArguments()[0]); rtType = TRU.FromType(mi.ReturnType.GetGenericArguments()[0]);