static void Main(string[] args)
        {
            var client = new Knoema.Client(
                ConfigurationManager.AppSettings["host"], ConfigurationManager.AppSettings["appId"], ConfigurationManager.AppSettings["appSecret"]);

            Console.WriteLine("Getting dataset metadata...");

            client.GetDataset("gquvbhe").ContinueWith(d =>
            {
                Console.WriteLine("Dataset has {0} dimensions: {1}.", d.Result.Dimensions.Count(), string.Join(", ", d.Result.Dimensions.Select(x => x.Name).ToArray()));

                var stub = new List<PivotRequestItem>();
                foreach (var dim in d.Result.Dimensions)
                {
                    Console.WriteLine(string.Format("Getting \"{0}\" dataset dimension details...", dim.Name));

                    client.GetDatasetDimension(d.Result.Id, dim.Id).ContinueWith(t =>
                    {
                        Console.WriteLine(string.Format("Dimension \"{0}\" has {1} members: {2}.",
                            t.Result.Name, t.Result.Items.Count(), string.Join(", ", t.Result.Items.Select(x => x.Name.ToString()).ToArray())));

                        stub.Add(new PivotRequestItem()
                        {
                            DimensionId = t.Result.Id,
                            Members = t.Result.Items.Where(x => x.HasData).Select(x => x.Key).Take(10).Cast<object>().ToList()
                        });
                    }).Wait();
                }

                var header = new PivotRequestItem() { DimensionId = "Time" };
                for (var i = 1990; i < 2010; i++)
                    header.Members.Add(i);

                Console.WriteLine("Getting dataset data...");

                var pivotRequest = new PivotRequest()
                {
                    Dataset = "gquvbhe",
                    Frequencies = new List<string>() { "A" },
                    Stub = stub,
                    Header = new List<PivotRequestItem>() { header }
                };

                client.GetData(pivotRequest).ContinueWith(t =>
                {
                    t.Result.Tuples.Take(10).ToList().ForEach(x =>
                        Console.WriteLine(string.Join(", ", x.Select(y => y.Key + ":" + y.Value).ToList()))
                    );

                    Console.WriteLine(string.Format("{0} rows of data have been received.", t.Result.Tuples.Count));
                    Console.WriteLine("Press any key to exit.");
                    Console.ReadKey();
                }).Wait();

            }).Wait();
        }
		static async Task GetData(string datasetId)
		{
			var client = new Knoema.Client(host, appId, appSecret);

			Console.WriteLine("Getting dataset metadata...");

			var dataset = await client.GetDataset(datasetId);

			Console.WriteLine("Dataset has {0} dimensions: {1}.", 
				dataset.Dimensions.Count(), string.Join(", ", dataset.Dimensions.Select(x => x.Name).ToArray()));

			var stub = new List<PivotRequestItem>();
			foreach (var dim in dataset.Dimensions)
			{
				Console.WriteLine(string.Format("Getting \"{0}\" dataset dimension details...", dim.Name));

				var dimension = await client.GetDatasetDimension(dataset.Id, dim.Id);

				Console.WriteLine(string.Format("Dimension \"{0}\" has {1} members: {2}.",
					dimension.Name, dimension.Items.Count(), string.Join(", ", dimension.Items.Select(x => x.Name.ToString()).ToArray())));

				stub.Add(new PivotRequestItem()
				{
					DimensionId = dimension.Id,
					Members = dimension.Items.Where(x => x.HasData).Select(x => x.Key).Take(10).Cast<object>().ToList()
				});
			}

			var header = new PivotRequestItem() { DimensionId = "Time" };
			for (var i = 1990; i < 2010; i++)
				header.Members.Add(i);

			Console.WriteLine("Getting dataset data...");

			var result = await client.GetData(new PivotRequest()
			{
				Dataset = datasetId,
				Frequencies = new List<string>() { "A" },
				Stub = stub,
				Header = new List<PivotRequestItem>() { header }
			});
			result.Tuples.Take(10).ToList().ForEach(x =>
				Console.WriteLine(string.Join(", ", x.Select(y => y.Key + ":" + y.Value).ToList()))
			);

			Console.WriteLine(string.Format("{0} rows of data have been received.", result.Tuples.Count));
		}