我尝试创建一个函数,该函数将创建long数组并返回此数组,因为我将在另一个函数中使用
。 private async Task<List<long>> ReturnListArrayLong()
{
if (MemOpen())
{
byte[] bPosition = new byte[290];
mmfvs.Read(bPosition, 0, 290);
Buffer.BlockCopy(bPosition, 0, data, 0, bPosition.Length);
List<long> ArrayLong = new List<long>();
for (int i = 0; i < data.Length; i++)
{
if (data[i] != 0)
{
await Task.Run(() => ArrayLong.Add(data[i]));
}
await Task.Delay(10);
}
return ArrayLong;
}
}
public async Task getArray()
{
await ReturnListArrayLong();
}
答案 0 :(得分:2)
在if
条件下,您的return语句放置在错误的位置。将声明移至if
之外,您应该会很好。
List<long> ArrayLong = new List<long>();
if (MemOpen())
{
byte[] bPosition = new byte[290];
mmfvs.Read(bPosition, 0, 290);
Buffer.BlockCopy(bPosition, 0, data, 0, bPosition.Length);
for (int i = 0; i < data.Length; i++)
{
if (data[i] != 0)
{
await Task.Run(() => ArrayLong.Add(data[i]));
}
await Task.Delay(10);
}
}
return ArrayLong;
希望这会有所帮助!
答案 1 :(得分:1)
该函数未使用正确的返回类型定义。
ArrayLong
应该为List<long>
,而您目前将其定义为List<Task<long>>
data
似乎是long[]
,因此您需要在列表上调用Add(data[i])
,而不是需要AddRange
的呼叫IEnumerable<long>
private async Task<List<long>> ReturnListArrayLong() {
List<long> ArrayLong = new List<long>();
if (MemOpen()) {
byte[] bPosition = new byte[290];
mmfvs.Read(bPosition, 0, 290);
Buffer.BlockCopy(bPosition, 0, data, 0, bPosition.Length);
for (int i = 0; i < data.Length; i++) {
if (data[i] != 0) {
await Task.Run(() => ArrayLong.Add(data[i]));
}
await Task.Delay(10);
}
}
return ArrayLong;
}
还要在异步函数中使用Task.Delay
代替Thread.Sleep
。