相关疑难解决方法(0)

是否有可能"等待收益率返回DoSomethingAsync()"

常规迭代器块(即"yield return")是否与"async"和"await"不兼容?

这样可以很好地了解我正在尝试做的事情:

async Task<IEnumerable<Foo>> Method(String [] Strs)
{
    // I want to compose the single result to the final result, so I use the SelectMany
    var finalResult = UrlStrings.SelectMany(link =>   //i have an Urlstring Collection 
                   await UrlString.DownLoadHtmlAsync()  //download single result; DownLoadHtmlAsync method will Download the url's html code 
              );
     return finalResult;
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到编译器错误,引用"无法从资源加载消息字符串".

这是另一种尝试:

async Task<IEnumerable<Foo>> Method(String [] Strs)
{
    foreach(var str in strs)
    {
        yield return await DoSomethingAsync( str)
    }
}
Run Code Online (Sandbox Code Playgroud)

但同样,编译器返回错误:"无法从资源加载消息字符串".


这是我项目中真正的编程代码

当我有一个List Task时,这非常有用,该任务可以从URL下载HTML,我使用语法"yield return await task",结果是我想要的 …

c# async-await c#-5.0 iasyncenumerable

98
推荐指数
6
解决办法
6万
查看次数

使用async/await与DataReader?(没有中间缓冲区!)

我的目标很简单,我想做异步I/O调用(使用异步等待) - 但是:

好.

目前这里是我的代码,它的工作是从db读取并将每一行项目投射到a Func<>

public IEnumerable < T > GetSomeData < T > (string sql, Func < IDataRecord, T > projector)
{
    using(SqlConnection _conn = new SqlConnection(@"Data Source=..."))
    {
        using(SqlCommand _cmd = new SqlCommand(sql, _conn))
        {
            _conn.Open();
            _cmd.CommandTimeout = 100000;
            using(IDataReader rdr = _cmd.ExecuteReader())
            {
                while (rdr.Read())  yield    return projector(rdr);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

那么,投影机是什么?

每个类都有一个函数,它获取a record(IDataRecord)并创建一个实体:

示例:

public class MyClass
{
    public static MyClass MyClassFactory(IDataRecord …
Run Code Online (Sandbox Code Playgroud)

c# io asynchronous async-await .net-4.5

14
推荐指数
1
解决办法
2万
查看次数

如何返回异步 IEnumerable&lt;string&gt;?

我有以下方法:

public async IEnumerable<string> GetListDriversAsync()
{
   var drives = await graphClient.Drive.Root.Children.Request().GetAsync();
        foreach (var d in drives)
            yield return d.ToString(); 
}
Run Code Online (Sandbox Code Playgroud)

但是编译器错误说:

“async 的返回类型必须是 void、Task 或 Task <T>

当方法为异步时如何返回 IEnumerable?

c#

2
推荐指数
2
解决办法
2529
查看次数

标签 统计

c# ×3

async-await ×2

.net-4.5 ×1

asynchronous ×1

c#-5.0 ×1

iasyncenumerable ×1

io ×1