我想知道是否有一种方法可以创建 Source对象IAsyncEnumerable<T>或IAsyncEnumerator<T>通过 Source 对象创建,就像TaskCompletionSource允许人们执行任务一样。特别是,TaskCompletionSource可以像任何其他参数一样传递。
也许是这样的:
public class AsyncEnumerables {
public Task HandlerTask { get; set; }
public async Task<string> ParentMethod() {
var source = new AsyncEnumerableSource<int>();
IAsyncEnumerable asyncEnumerable = source.GetAsyncEnumerable();
HandlerTask = Task.Run(() => handleAsyncResultsAsTheyHappen(asyncEnumerable));
int n = await someOtherTask();
source.YieldReturn(n);
var r = await ChildMethod(source);
source.Complete(); // this call would cause the HandlerTask to complete.
return r;
}
private async Task<string> ChildMethod(AsyncEnumerableSource<int> source) {
source.YieldReturn(5);
await SomeOtherCall();
source.YieldReturn(10);
return "hello";
} …Run Code Online (Sandbox Code Playgroud)