Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 亚马逊S3-传输工具赢得';我不能并行工作_C#_.net_Multithreading_Amazon S3_Parallel Processing - Fatal编程技术网

C# 亚马逊S3-传输工具赢得';我不能并行工作

C# 亚马逊S3-传输工具赢得';我不能并行工作,c#,.net,multithreading,amazon-s3,parallel-processing,C#,.net,Multithreading,Amazon S3,Parallel Processing,我正在尝试使用amazonsdkfor.NET中的TransferUtility类将多个文件上载到S3 我的想法是,由于SDK不允许同时上传来自不同文件夹的多个文件,我会创建多个线程并上传到那里,但Amazon SDK似乎对此进行了某种检查,因为我没有注意到我上传方法的任何并行执行 下面是我正在使用的伪代码: int totalUploaded = 0; foreach (var dItem in Detection.Items.AsParallel()) { UploadFile(dI

我正在尝试使用
amazonsdk
for
.NET
中的
TransferUtility
类将多个文件上载到
S3

我的想法是,由于SDK不允许同时上传来自不同文件夹的多个文件,我会创建多个线程并上传到那里,但Amazon SDK似乎对此进行了某种检查,因为我没有注意到我上传方法的任何并行执行

下面是我正在使用的伪代码:

int totalUploaded = 0;
foreach (var dItem in Detection.Items.AsParallel())
{
    UploadFile(dItem);
    totalUploaded++;

    Action a = () => { lblStatus.Text = $"Uploaded {totalUploaded} from {Detection.ItemsCount}"; };
    BeginInvoke(a);
}
我正在使用
.AsParallel
生成多个线程。我的CPU(
i7-5930K
)有6个内核并支持多线程,因此
AsParallel
必须根据需要生成更多线程

这里是上传方法

private void UploadFile(Detection.Item item)
{
    Debug.WriteLine("Enter " + item.FileInfo);
    Interlocked.Increment(ref _threadsCount);

...

        using (var client = AmazonS3Client)
        {

        ....

            // if we are here we need to upload
            TransferUtilityUploadRequest request = new TransferUtilityUploadRequest
            {
                Key = s3Key,
                BucketName = settings.BucketName,
                CannedACL = S3CannedACL.PublicRead,
                FilePath = item.FileInfo.FullName,
                ContentType = "image/png",
            };

            TransferUtility utility = new TransferUtility(client);
            utility.Upload(request);
        }
}
我看不出这里有什么问题?非常感谢您的任何想法。

Thx

代码中的问题是,您只构建了
并行可枚举
,但将其视为一个简单的
IEnumerable

foreach (var dItem in Detection.Items.AsParallel())
这部分代码只是在集合上迭代。如果希望执行并行,则必须使用扩展方法:

您也可以简单地使用该类:


哦,哇,我已经使用这种构造很长时间了,我一直认为foreach会在更多线程中转换,真是个傻瓜:)谢谢你,现在它可以根据需要工作了。不,不幸的是,它提供了一个并行执行下一个
LINQ
扩展方法的机会。祝你好运,别忘了换其他类似建筑的地方!
Detection.Items.AsParallel().ForAll(dItem  =>
{
    //Do parallel stuff here
});
Parallel.ForEach(Detection.Items, dItem => 
{
    //Do parallel stuff here
});