private Table CreateTable()
        {
            CreateTableRequest createRequest = new CreateTableRequest()
                .WithTableName(this._tableName)
                .WithKeySchema(new KeySchema()
                    .WithHashKeyElement(new KeySchemaElement()
                        .WithAttributeName(ATTRIBUTE_SESSION_ID)
                        .WithAttributeType("S")))
                .WithProvisionedThroughput(new ProvisionedThroughput()
                    .WithReadCapacityUnits(this._initialReadUnits)
                    .WithWriteCapacityUnits(this._initialWriteUnits));
            createRequest.BeforeRequestEvent += this.UserAgentRequestEventHandler;

            CreateTableResponse response = this._ddbClient.CreateTable(createRequest);

            DescribeTableRequest descRequest = new DescribeTableRequest()
                .WithTableName(this._tableName);
            descRequest.BeforeRequestEvent += this.UserAgentRequestEventHandler;

            // Wait till table is active
            bool isActive = false;
            while (!isActive)
            {
                Thread.Sleep(DESCRIBE_INTERVAL);
                DescribeTableResponse descResponse = this._ddbClient.DescribeTable(descRequest);
                string tableStatus = descResponse.DescribeTableResult.Table.TableStatus;

                if (string.Equals(tableStatus, ACTIVE_STATUS, StringComparison.InvariantCultureIgnoreCase))
                    isActive = true;
            }

            Table table = Table.LoadTable(this._ddbClient, this._tableName, Table.DynamoDBConsumer.SessionStateProvider);
            return table;
        }
 IAsyncResult invokeCreateTable(CreateTableRequest createTableRequest, AsyncCallback callback, object state, bool synchronized)
 {
     IRequest irequest = new CreateTableRequestMarshaller().Marshall(createTableRequest);
     var unmarshaller = CreateTableResponseUnmarshaller.GetInstance();
     AsyncResult result = new AsyncResult(irequest, callback, state, synchronized, signer, unmarshaller);
     Invoke(result);
     return result;
 }
 /// <summary>
 /// Initiates the asynchronous execution of the CreateTable operation.
 /// <seealso cref="Amazon.DynamoDB.AmazonDynamoDB.CreateTable"/>
 /// </summary>
 /// 
 /// <param name="createTableRequest">Container for the necessary parameters to execute the CreateTable operation on AmazonDynamoDB.</param>
 /// <param name="callback">An AsyncCallback delegate that is invoked when the operation completes.</param>
 /// <param name="state">A user-defined state object that is passed to the callback procedure. Retrieve this object from within the callback
 ///          procedure using the AsyncState property.</param>
 /// 
 /// <returns>An IAsyncResult that can be used to poll or wait for results, or both; this value is also needed when invoking EndCreateTable
 ///         operation.</returns>
 public IAsyncResult BeginCreateTable(CreateTableRequest createTableRequest, AsyncCallback callback, object state)
 {
     return invokeCreateTable(createTableRequest, callback, state, false);
 }
 /// <summary>
 /// <para>Adds a new table to your account.</para> <para>The table name must be unique among those associated with the AWS Account issuing the
 /// request, and the AWS Region that receives the request (e.g. <c>us-east-1</c> ).</para> <para>The <c>CreateTable</c> operation triggers an
 /// asynchronous workflow to begin creating the table. Amazon DynamoDB immediately returns the state of the table ( <c>CREATING</c> ) until the
 /// table is in the <c>ACTIVE</c> state. Once the table is in the <c>ACTIVE</c> state, you can perform data plane operations.</para>
 /// </summary>
 /// 
 /// <param name="createTableRequest">Container for the necessary parameters to execute the CreateTable service method on AmazonDynamoDB.</param>
 /// 
 /// <returns>The response from the CreateTable service method, as returned by AmazonDynamoDB.</returns>
 /// 
 /// <exception cref="ResourceInUseException"/>
 /// <exception cref="LimitExceededException"/>
 /// <exception cref="InternalServerErrorException"/>
 public CreateTableResponse CreateTable(CreateTableRequest createTableRequest)
 {
     IAsyncResult asyncResult = invokeCreateTable(createTableRequest, null, null, true);
     return EndCreateTable(asyncResult);
 }
 /// <summary>
 /// <para> The CreateTable operation adds a new table to your account. The table name must be unique among those associated with the AWS Account
 /// issuing the request, and the AWS Region that receives the request (e.g. us-east-1). The CreateTable operation triggers an asynchronous
 /// workflow to begin creating the table. Amazon DynamoDB immediately returns the state of the table (CREATING) until the table is in the ACTIVE
 /// state. Once the table is in the ACTIVE state, you can perform data plane operations. </para>
 /// </summary>
 /// 
 /// <param name="createTableRequest">Container for the necessary parameters to execute the CreateTable service method on AmazonDynamoDB.</param>
 /// 
 /// <returns>The response from the CreateTable service method, as returned by AmazonDynamoDB.</returns>
 /// 
 /// <exception cref="ResourceInUseException"/>
 /// <exception cref="LimitExceededException"/>
 /// <exception cref="InternalServerErrorException"/>
 public CreateTableResponse CreateTable(CreateTableRequest createTableRequest)
 {
     IRequest<CreateTableRequest> request = new CreateTableRequestMarshaller().Marshall(createTableRequest);
     CreateTableResponse response = Invoke<CreateTableRequest, CreateTableResponse> (request, this.signer, CreateTableResponseUnmarshaller.GetInstance());
     return response;
 }