我正在访问XLSX文件并总结列的[FileSize]
值,它包含超过100k行。
我想将OLEDB
与多任务组合使用。之后,我希望任务返回一个整数/浮点值,这样我就可以计算每个XLSX文件与总文件大小的百分比。到目前为止,我有这个代码:
foreach (string subdir in alldir)
{
Task<int> iSize = Task<int>.Factory.StartNew(() =>
{
int result = 0;
using (OleDbConnection olecnn = new OleDbConnection(GetConnectionString(subdir)))
{
try
{
olecnn.Open();
using (OleDbCommand sumcmd = new OleDbCommand("SELECT SUM([File Size]) FROM [FileInfos$]"))
{
sumcmd.Connection = olecnn;
result = (int)sumcmd.ExecuteScalar();
//BarChart.Series["Memory Usage"].Points.AddXY(Path.GetFileName(subdir), result);
return result;
}
olecnn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString()); return result;
}
}
}).ContinueWith(cnt => cnt.Dispose());
}
似乎存在语法错误
不能隐式地将类型'
System.Threading.Tasks.Tasks
'转换为'System.Threading.Tasks.Task<int>
'。存在显式转换(您是否错过了演员表)?
我阅读了文档,但无法弄清楚如何将result
作为整数/浮点数,所以我可以继续这个值。
你启动一个返回int
结果的任务,然后跟随ContinueWith
中的另一个任务,它只能返回void
- 这就是语法错误的来源。
另外,你真的需要在ContinueWith中调用Dispose()吗?声明为使用块的一部分的任何内容都将调用Dispose on,即使抛出异常(请参阅this blog post以获取解释和代码示例)。
另外,2,这篇文章的答案有一些有用的信息,为什么你通常不应该使用Factory.StartNew(这是半过时的):What is the difference between Task.Run() and Task.Factory.StartNew()
希望有所帮助!