3

ここで私が間違っていることを誰かが指摘してくれることを願っています。ファイル アクセス ルールを読み込むプロセスがあり、それを並列で実行しようとしています。

これが私がこれまでに持っているコードです:

public List<FolderAccessRule> GetSecurityGroupsForFolder(long importId, string subdirectory, bool includeInherited)
    {
        ConcurrentQueue<FolderAccessRule> groups = new ConcurrentQueue<FolderAccessRule>();
        ConcurrentQueue<Exception> exceptions = new ConcurrentQueue<Exception>();

        DirectoryInfo dInfo = new DirectoryInfo(subdirectory);
        DirectorySecurity dSecurity = dInfo.GetAccessControl();

        AuthorizationRuleCollection authorizationRuleCollection = dSecurity.GetAccessRules(true, includeInherited, typeof(NTAccount));
        Parallel.ForEach( authorizationRuleCollection,
            fsar =>
            {
                try
                {
                    FolderAccessRule group = this.GetGroup(fsar);
                    if (group != null)
                    {
                        groups.Enqueue(group);
                    }
                }
                catch (Exception e)
                {
                    exceptions.Enqueue(e);
                }
            });

        foreach (Exception e in exceptions)
        {
            string message = string.Concat(e.GetType(), "Exception getting Directory info for  ", subdirectory);
            this.RecordException(message, subdirectory, e);
        }

        return groups.ToList();
    }

(訓練されていない目には)どれがうまくいくように見えますか。ただし、Parallel.ForEachエラーが発生するためコンパイルされません。

The type arguments for method 'System.Threading.Tasks.Parallel.ForEach<TSource>
(System.Collections.Generic.IEnumerable<TSource>, System.Action<TSource>)' cannot be inferred from the usage.
Try specifying the type arguments explicitly.

また、問題のある行を次のように変更しようとしました。

Parallel.ForEach<FileSystemAccessRule>( authorizationRuleCollection, fsar =>

しかし、まだ喜びはありません。

それで、私は何を間違っていますか?前もって感謝します。

4

1 に答える 1