我正在尝试使用await关键字发现使用Lambda表达式连接到系统的所有逻辑磁盘,以异步执行该功能。除了退货单,其他一切似乎都很好。
由于以下错误,return(Search.Get());
无法编译:
“无法将lambda表达式转换为委托类型'System.Func>',因为块中的某些返回类型不能隐式转换为委托返回类型(CS1662)-D:\ PugApplications \ Pug_AdvancedControls \ Pug_AdvancedControls \ Pug_FileSystemTree \ Pug_FileSystemNode.cs :34,14
我怎样才能做到这一点?我读过的所有内容都表明这应该可行。
Pug_DriveType只是我编写的用于反映Win32 DriveType枚举的枚举。
//读取驱动器
Func<Pug_DriveType, Task<ManagementObjectCollection>> ReadTask = (Pug_DriveType DT) =>
{
StringBuilder Query =
new StringBuilder("SELECT * FROM Win32_LogicalDisk WHERE DriveType=\"")
.Append((int)DT).Append("\"");
ManagementObjectSearcher Search = new ManagementObjectSearcher(Query.ToString());
return (Search.Get());
};
谢谢你的帮助
丹尼
最佳答案
我想您想要更多类似这样的东西:
Func<Pug_DriveType, Task<ManagementObjectCollection>> ReadTask = async (Pug_DriveType DT) =>
{
StringBuilder Query =
new StringBuilder("SELECT * FROM Win32_LogicalDisk WHERE DriveType=\"")
.Append((int)DT).Append("\"");
ManagementObjectSearcher Search = new ManagementObjectSearcher(Query.ToString());
return await Task.Run(() => Search.Get());
};
或可能:
Func<Pug_DriveType, Task<ManagementObjectCollection>> ReadTask = (Pug_DriveType DT) =>
{
StringBuilder Query =
new StringBuilder("SELECT * FROM Win32_LogicalDisk WHERE DriveType=\"")
.Append((int)DT).Append("\"");
ManagementObjectSearcher Search = new ManagementObjectSearcher(Query.ToString());
return Task.Run(() => Search.Get());
};
(取决于您可能还会在其中添加匿名方法。)
以上任何一种都会使您的匿名方法返回
Task<ManagementObjectCollection>
,这是已将委托实例分配给的已声明委托类型变量的返回类型。您得到的错误是告诉您lambda表达式返回的类型不同于为该表达式推断的委托类型(基于变量的类型)的类型。关于c# - 任务,等待和ManagementObjectCollection,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26986011/