共通部分でWorkerThreadHolderクラスを新設。
共通部分でSessionContextにDeviceThreadというメンバ名でWorkerThreadHolderクラスのインスタンスを追加

各Providerでは、一番単純な部類の変更で以下のような改変になります。
改変前：
public virtual void Claim(string ConsumerID, int Timeout)
{
    try
    {
            ConcretizationDevice(base.GetSessionContext(ConsumerID).Device).Claim(Timeout);
    }
    catch...

改変後：
public virtual void Claim(string ConsumerID, int Timeout)
{
    try
    {
        var sessionContext = (base.GetSessionContext(ConsumerID));
        sessionContext.DeviceThread.ExecuteOnWorkerThread(() =>
        {
            ConcretizationDevice(sessionContext.Device).Claim(Timeout);
        }
        );
    }
　　catch...

また、
一番複雑な部類の変更で以下のような改変になります。
改変前：
public virtual CompareFirmwareResult CompareFirmwareVersion(string ConsumerID, string FirmwareFileName)
{
    try
    {
        return (CompareFirmwareResult)Convert[ConcretizationDevice(base.GetSessionContext(ConsumerID).Device).CompareFirmwareVersion(FirmwareFileName)];
    }
    catch...

改変後:(戻り値あり、URI対応＋セッションごとスレッド対応)
public virtual CompareFirmwareResult CompareFirmwareVersion(string ConsumerID, string FirmwareFileName)
{
    try
    {
        CompareFirmwareResult result = CompareFirmwareResult.Unknown;

        UriToTempFileHelper.UriToTempFileExecuteTargetMethod(FirmwareFileName, (tempFileName) =>
        {
            var sessionContext = base.GetSessionContext(ConsumerID);
            sessionContext.DeviceThread.ExecuteOnWorkerThread(() =>
            {
                result = (CompareFirmwareResult)Convert[ConcretizationDevice(sessionContext.Device).CompareFirmwareVersion(tempFileName)];
            });
        });

        return result;
    }
