本文整理汇总了C#中Task.Cast方法的典型用法代码示例。如果您正苦于以下问题:C# Task.Cast方法的具体用法?C# Task.Cast怎么用?C# Task.Cast使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Task
的用法示例。
在下文中一共展示了Task.Cast方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Main
static void Main()
{
Console.WriteLine("Main program thread.");
Console.WriteLine("Queuing up a bunch of tasks.");
var tasks = new Task[100];
for (var x = 0; x < 100; x += 1)
{
tasks[x] = Task<int>.Factory.StartNew(Sequence);
Thread.Sleep(10);
}
Console.WriteLine("Waiting for tasks to finish...");
Task.WaitAll(tasks);
foreach (var task in tasks.Cast<Task<int>>())
{
Console.WriteLine("Task #{0} Computed {1} values", task.Id, task.Result);
}
Console.WriteLine("We're done.");
Console.ReadLine();
}
示例2: LoadThumbnailImageAsync
public override async Task<MemoryImage> LoadThumbnailImageAsync(HttpClient http, CancellationToken cancellationToken)
{
// 画像中央に描画されるタイル (ピクセル単位ではなくタイル番号を表す)
// タイル番号に小数部が含まれているが、これはタイル内の相対的な位置を表すためこのまま保持する
var centerTileNum = this.WorldToTilePos(this.Longitude, this.Latitude, this.Zoom);
// 画像左上に描画されるタイル
var topLeftTileNum = PointF.Add(centerTileNum, new SizeF(-this.ThumbnailSize.Width / 2.0f / TileSize.Width, -this.ThumbnailSize.Height / 2.0f / TileSize.Height));
// タイル番号の小数部をもとに、タイル画像を描画する際のピクセル単位のオフセットを算出する
var tileOffset = Size.Round(new SizeF(-TileSize.Width * (topLeftTileNum.X - (int)topLeftTileNum.X), -TileSize.Height * (topLeftTileNum.Y - (int)topLeftTileNum.Y)));
// 縦横のタイル枚数
var tileCountX = (int)Math.Ceiling((double)(this.ThumbnailSize.Width + Math.Abs(tileOffset.Width)) / TileSize.Width);
var tileCountY = (int)Math.Ceiling((double)(this.ThumbnailSize.Height + Math.Abs(tileOffset.Height)) / TileSize.Height);
// 読み込む対象となるタイル画像が 10 枚を越えていたら中断
// ex. 一辺が 512px 以内のサムネイル画像を生成する場合、必要なタイル画像は最大で 9 枚
if (tileCountX * tileCountY > 10)
throw new OperationCanceledException();
// タイル画像を読み込む
var tilesTask = new Task<MemoryImage>[tileCountX, tileCountY];
foreach (var x in Enumerable.Range(0, tileCountX))
{
foreach (var y in Enumerable.Range(0, tileCountY))
{
var tilePos = Point.Add(Point.Truncate(topLeftTileNum), new Size(x, y));
tilesTask[x, y] = this.LoadTileImageAsync(http, tilePos);
}
}
await Task.WhenAll(tilesTask.Cast<Task<MemoryImage>>())
.ConfigureAwait(false);
using (var bitmap = new Bitmap(this.ThumbnailSize.Width, this.ThumbnailSize.Height))
{
using (var g = Graphics.FromImage(bitmap))
{
g.TranslateTransform(tileOffset.Width, tileOffset.Height);
foreach (var x in Enumerable.Range(0, tileCountX))
{
foreach (var y in Enumerable.Range(0, tileCountY))
{
using (var image = tilesTask[x, y].Result)
{
g.DrawImage(image.Image, TileSize.Width * x, TileSize.Height * y);
}
}
}
}
MemoryImage result = null;
try
{
result = MemoryImage.CopyFromImage(bitmap);
return result;
}
catch { result?.Dispose(); throw; }
}
}