添加 return 作为长异步列表

Add and return as list of long async

我正在尝试创建一个函数来创建一个 long 数组和 return 这个,因为我将在另一个函数中使用。

    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();
}

错误:DrawForm.ReturnListArrayLong()': 不是所有代码路径return一个值

未使用正确的 return 类型定义函数。

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

您在 if 条件内的错误位置有 return 语句。将声明和 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;

希望对您有所帮助!